home *** CD-ROM | disk | FTP | other *** search
/ Internet Tools (InfoMagic) / Internet Tools.iso / dos_win / winsock / wsock20 / archive next >
Internet Message Format  |  1994-05-03  |  139KB

  1. From sunsite.unc.edu!winsock-hackers Tue Oct 26 22:37:12 1993
  2. Date: Wed, 27 Oct 93 01:37:51 EDT
  3. Message-Id: <9310262311.AA01246@atlas>
  4. Reply-To: paul@atlas.abccomp.oz.au
  5. Originator: winsock-hackers@sunsite.unc.edu
  6. Sender: winsock-hackers@sunsite.unc.edu
  7. From: paul@atlas.abccomp.oz.au
  8. To: Multiple recipients of list <winsock-hackers@sunsite.unc.edu>
  9. Subject: Re: gethostname().
  10. X-Listprocessor-Version: 6.0a -- ListProcessor by Anastasios Kotsikonas
  11. Status: OR
  12.  
  13. Thus expounded Distinct TCP/IP on Oct 25,10:22pm:
  14. /--------------------
  15. |Hi!
  16. |
  17. |The WINSOCK spec says that gethostname() returns a name that is 
  18. |"guaranteed" to be successfully parsed by gethostbyname(). This
  19. |effectively means that gethostname() cannot return an internet
  20. |address in the formatt "a.b.c.d", because these are not parsed by 
  21. |gethostbyname().
  22. |
  23. |If a machine is getting its local IP address from RARP, BOOTP
  24. |or PPP, it only has a valid IP address and no name associated
  25. |with it. So in these case what should gethostname() return?
  26. |It cannot return the IP address and somehow returning an error
  27. |code does not seem to be the correct option. If it has to return an 
  28. |error, what error code should it return?????
  29.  
  30. There is a broader issue - what if the stack is configured with a 
  31. name, but that name is not in the stacks host table or the DNS - in that
  32. case, normal processing would NOT resolve the name into an IP number.
  33.  
  34. This gethostname() is usually used to find the stack's IP number,
  35. by calling gethostbyname() on the string returned by gethostname().
  36.  
  37. My feeling is the stack should provide some sort of dummy name if there 
  38. is not one coded, and the gethostbyname/WSAgetHostByName should explicitly
  39. check for this string and return the local IP number, without going
  40. through the normal resolving process. That way, if RARP/BOOTP/etc is
  41. used to configure the IP number and there is no host name, gethostname
  42. should return "localhost" or something that only need be meaningful
  43. to the stack without recourse to the DNS or hosts file.
  44.  
  45. Its a good question, that needs further clarification in the next
  46. spec..
  47.  
  48. |    vikas
  49. |
  50. |==========================================================
  51. |Vikas Garg                   Phone : (408) 741-0781         
  52. |Distinct Corp.               Fax   : (408) 741-0795         
  53. |14395 Saratoga Av.           E-Mail: vikas@distinct.com     
  54. |Saratoga, CA 95070                                          
  55. |U.S.A.                                                      
  56. |==========================================================
  57. |
  58. \--------------------- {end}
  59.  
  60.  
  61. -- 
  62. Paul Brooks              |paul@abccomp.oz.au       |Emerging Standard:
  63. TurboSoft Pty Ltd        |pwb@newt.phys.unsw.edu.au|  one that has not yet
  64. 579 Harris St., Ultimo   |                         |  been superseded.
  65. Sydney Australia 2007    |ph: +61 2 281 3155       |  
  66. ????
  67. ????
  68. From gabor.inference.com!inference.com!gloster Thu Jan 27 13:46:00 1994
  69. Date: Thu, 27 Jan 94 13:50:20 PST
  70. From: "Vance M. Gloster" <gloster@inference.com>
  71. Message-Id: <9401272150.AA09238@quaestor>
  72. To: martinh@jsbus.com
  73. Subject: Windows Sockets 2 Contribution
  74. content-length: 137
  75. Status: OR
  76.  
  77. UDP sockets
  78.  
  79. Adding a standard interface to UDP sockets so that a standard Ping
  80. could be created.
  81.  
  82. -Vance Gloster
  83.  gloster@inference.com
  84. ????
  85. ????
  86. From gabor.inference.com!inference.com!gloster Thu Jan 27 13:48:34 1994
  87. Date: Thu, 27 Jan 94 13:53:00 PST
  88. From: "Vance M. Gloster" <gloster@inference.com>
  89. Message-Id: <9401272153.AA09283@quaestor>
  90. To: martinh@jsbus.com
  91. Subject: Windows Sockets 2 Contribution
  92. content-length: 231
  93. Status: OR
  94.  
  95. BOOTP support
  96.  
  97. Explicit support for BOOTP which allows dialup connections to set
  98. their IP address dynamically at connection time.  A standard interface
  99. for this should be explicitly required.
  100.  
  101. -Vance Gloster
  102.  gloster@inference.com
  103. ????
  104. ????
  105. From gabor.inference.com!inference.com!gloster Thu Jan 27 14:33:48 1994
  106. Date: Thu, 27 Jan 94 14:39:21 PST
  107. From: "Vance M. Gloster" <gloster@inference.com>
  108. Message-Id: <9401272239.AA11350@quaestor>
  109. To: martinh@jsbus.com
  110. Subject: Windows Sockets 2 Contribution
  111. content-length: 379
  112. Status: OR
  113.  
  114. Custom wrapper creation.
  115.  
  116. As discussions on the winsock maillist have indicated, creating a DLL
  117. that would provide easy access to winsock from another language (i.e.,
  118. Visual BASIC) is both desirable and difficult to do portably on
  119. Winsock 1.1.  The 2.0 product should explicitly support creating
  120. portable layers on top of Winsock in a DLL.
  121.  
  122. -Vance Gloster
  123.  gloster@inference.com
  124. ????
  125. ????
  126. From relay2.uu.net!uunet.uu.net!tcemail!is3.indy.tce.com!fisherm Fri Jan 28
  127. 10:37:33 1994
  128. Reply-To: tcemail!FisherM@is3.indy.tce.com
  129. Return-Receipt-To: tcemail!is3.indy.tce.com!FisherM@jsbus.com
  130. Date: Fri, 28 Jan 94 13:23:00 PST
  131. From: Fisher Mark <tcemail!is3.indy.tce.com!FisherM@uunet.UU.NET>
  132. Subject: WinSock 2.0 -- Raw Sockets for Ping
  133. To: "Windows Sockets 2.0" <martinh@jsbus.com>
  134. Message-Id: <2D49838A@MSMAIL.INDY.TCE.COM>
  135. Encoding: 12 TEXT
  136. X-Mailer: Microsoft Mail V3.0
  137. Status: OR
  138.  
  139.  
  140. The most needed item is mandatory raw sockets support to the level required 
  141. by ping.  Ping is what everyone uses for initial testing of connections -- 
  142. it should always be able to be written for a conforming WinSock 
  143. implementation.
  144. ======================================================================
  145. Mark Fisher                            Thomson Consumer Electronics
  146. fisherm@tcemail.indy.tce.com           Indianapolis, IN
  147.  
  148. "Just as you should not underestimate the bandwidth of a station wagon
  149. traveling 65 mph filled with 8mm tapes, you should not overestimate
  150. the bandwidth of FTP by mail."
  151. ????
  152. ????
  153. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:49:55 1994
  154. Message-Id: <9401312254.AA04906@chaos.tci.com>
  155. From: jspoffor <jspoffor@klaven.tci.com>
  156. Date: Mon, 31 Jan 94 15:50
  157. To: martinh <martinh@jsbus.com>
  158. Subject: Other Protocols in Winsock 2.0
  159. Status: OR
  160.  
  161.  
  162. I'd really like to see the inclusion of other protocols, and if I had to 
  163. pick only one, I'd say add IPX/SPX.  Perhaps it wouldn't be manditory, but 
  164. there should be some way of determining if it supports IPX/SPX (as opposed 
  165. to TCP/IP) at start up time.  Also, the necessary structures and control 
  166. differences would need to be included in the specification.  Right now, I 
  167. have to add my own abstraction layer to deal with doing SNMP over IPX or IP. 
  168.  It would be great not to need to do that.
  169.  
  170. Jason Spofford
  171. jspoffor@klaven.tci.com
  172.  
  173. ????
  174. ????
  175. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:51:43 1994
  176. Message-Id: <9401312254.AA04910@chaos.tci.com>
  177. From: jspoffor <jspoffor@klaven.tci.com>
  178. Date: Mon, 31 Jan 94 15:50
  179. To: martinh <martinh@jsbus.com>
  180. Subject: SLIP and CSLIP in Winsock 2.0
  181. Status: OR
  182.  
  183.  
  184. It would be great if there was a standard way to support SLIP and CSLIP 
  185. through Winsock.
  186.  
  187. Jason Spofford
  188. jspoffor@klaven.tci.com
  189.  
  190. ????
  191. ????
  192. From chaos.tci.com!klaven.tci.com!jspoffor Mon Jan 31 14:51:43 1994
  193. Message-Id: <9401312254.AA04902@chaos.tci.com>
  194. From: jspoffor <jspoffor@klaven.tci.com>
  195. Date: Mon, 31 Jan 94 15:50
  196. To: martinh <martinh@jsbus.com>
  197. Subject: RAW SOCKETS in Winsock 2.0
  198. Status: OR
  199.  
  200.  
  201. I'm an application developer.  I'd like winsock implementations to have to 
  202. support PING  by providing access to ICMP (i.e. RAW SOCKETS).  I'm sure you 
  203. have  heard this before, I'd just like to add my voice.  
  204.  
  205. ????
  206. ????
  207. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:45:26 1994
  208. From: Mark Edwards <marke@firefox.co.uk>
  209. X-Mailer: SCO System V Mail (version 3.2)
  210. To: martinh@jsbus.com
  211. Subject: Windows Sockets 2 Contribution
  212. Date: Wed, 2 Feb 94 11:11:10 gmt
  213. Message-ID: <9402021111.aa08003@ffsco.firefox.co.uk>
  214. Status: OR
  215.  
  216. Hi Martin,
  217.  
  218. Long time no see, hope all is well.
  219.  
  220. Item 1.
  221.  
  222. Short Desc: Winsock 2 requires the capability for Multi-protocol support.
  223.  
  224. Longer Desc: This is reasonably easy to provide, since all the DLL needs do
  225. is communicate to the correct stack by checking the protocol family passed
  226. in the socket() call.  It would probably, be a good idea to include an
  227. area in the WSADATA structure that holds the values of the protocol families
  228. that the DLL currently knows about and can handle.  This is not important
  229. to stack vendors who only produce one stack, but affects vendors such as
  230. Microsoft, JSB and Firefox.
  231.  
  232.  
  233. Regards,
  234. Mark.
  235.  
  236. -------------------------------------------------------------------------
  237. Mark S. Edwards
  238. Firefox Communications Ltd,
  239. Cranmore House,
  240. Cranmore Boulevard,
  241. Solihull, West Midlands. United Kingdom. B90 4RX.
  242.  
  243. phone:  021 609 6090 (intl, 44 21 609 6090)
  244. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  245.  
  246. Internet: marke@firefox.co.uk
  247. -------------------------------------------------------------------------
  248. ????
  249. ????
  250. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:46:34 1994
  251. From: Mark Edwards <marke@firefox.co.uk>
  252. X-Mailer: SCO System V Mail (version 3.2)
  253. To: martinh@jsbus.com
  254. Subject: Windows Sockets 2 Contribution
  255. Date: Wed, 2 Feb 94 11:12:24 gmt
  256. Message-ID: <9402021112.aa08010@ffsco.firefox.co.uk>
  257. Status: OR
  258.  
  259. Martin,
  260.  
  261. Item 2.
  262.  
  263. Short Desc: A mechanism for retrieving Service definitions from a network.
  264.  
  265. Longer Desc: Sockets as it stands is great for protocols where the address
  266. information is known by the application or entered by the user.  It cannot
  267. cope with broadcast service definitions where the user has no idea of the
  268. network address. The means for retrieving service definitions from a 
  269. network is required for protocols such as DEC LAT, IPX/SPX (SAP) and, dare
  270. I say it, Firefox.  We have currently implemented such a mechanism, and
  271. think that it shows promise as a generic 'Extra functionality' handler.
  272.  
  273.  
  274.  
  275. Regards,
  276. Mark.
  277.  
  278. -------------------------------------------------------------------------
  279. Mark S. Edwards
  280. Firefox Communications Ltd,
  281. Cranmore House,
  282. Cranmore Boulevard,
  283. Solihull, West Midlands. United Kingdom. B90 4RX.
  284.  
  285. phone:  021 609 6090 (intl, 44 21 609 6090)
  286. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  287.  
  288. Internet: marke@firefox.co.uk
  289. -------------------------------------------------------------------------
  290. ????
  291. ????
  292. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:47:57 1994
  293. From: Mark Edwards <marke@firefox.co.uk>
  294. X-Mailer: SCO System V Mail (version 3.2)
  295. To: martinh@jsbus.com
  296. Subject: Windows Sockets 2 Contribution
  297. Date: Wed, 2 Feb 94 11:13:45 gmt
  298. Message-ID: <9402021113.aa08016@ffsco.firefox.co.uk>
  299. Status: OR
  300.  
  301. Martin,
  302.  
  303. Item 3.
  304.  
  305. Short Desc: A clearing house for new protocol families and associated
  306. address types.
  307.  
  308. Longer Desc: Firefox at the moment have implemented a protocol family with
  309. an address structure.  The protocol family is obviously chosen at random
  310. and at the moment conflicts with nobody else.  If vendors are encouraged
  311. to add new protocol types then we need to ensure that the protocol family
  312. numbers do not clash.
  313.  
  314.  
  315.  
  316. Regards,
  317. Mark.
  318.  
  319. -------------------------------------------------------------------------
  320. Mark S. Edwards
  321. Firefox Communications Ltd,
  322. Cranmore House,
  323. Cranmore Boulevard,
  324. Solihull, West Midlands. United Kingdom. B90 4RX.
  325.  
  326. phone:  021 609 6090 (intl, 44 21 609 6090)
  327. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  328.  
  329. Internet: marke@firefox.co.uk
  330. -------------------------------------------------------------------------
  331. ????
  332. ????
  333. From relay2.pipex.net!firefox.co.uk!marke Wed Feb  2 03:49:26 1994
  334. From: Mark Edwards <marke@firefox.co.uk>
  335. X-Mailer: SCO System V Mail (version 3.2)
  336. To: martinh@jsbus.com
  337. Subject: Windows Sockets 2 Contribution
  338. Date: Wed, 2 Feb 94 11:15:10 gmt
  339. Message-ID: <9402021115.aa08022@ffsco.firefox.co.uk>
  340. Status: OR
  341.  
  342. Martin,
  343.  
  344. Item 4.
  345.  
  346. Short Desc: A mechanism for broadcasting service definitions on a network.
  347.  
  348. Longer Desc: If Winsock 2 caters for the retrieval of broadcast service
  349. definitions, then it should also be capable of accepting a service definition
  350. from an application to be broadcast on the network.
  351.  
  352.  
  353. Regards,
  354. Mark.
  355.  
  356. -------------------------------------------------------------------------
  357. Mark S. Edwards
  358. Firefox Communications Ltd,
  359. Cranmore House,
  360. Cranmore Boulevard,
  361. Solihull, West Midlands. United Kingdom. B90 4RX.
  362.  
  363. phone:  021 609 6090 (intl, 44 21 609 6090)
  364. Fax  :  021 609 6060 (intl, 44 21 609 6060)
  365.  
  366. Internet: marke@firefox.co.uk
  367. -------------------------------------------------------------------------
  368. ????
  369. ????
  370. From sun.com!suneast.east.sun.com!rwolin Wed Feb  2 14:11:08 1994
  371. Date: Wed, 2 Feb 1994 17:16:48 +0500
  372. From: Ross Wolin - PC Networking Engineering CONTRACTOR
  373. <rwolin@suneast.East.Sun.COM>
  374. Message-Id: <9402022216.AA11225@denmark.East.Sun.COM>
  375. To: martinh@jsbus.com
  376. Subject: Windows Sockets 2 Contribution
  377. Content-Length: 378
  378. Status: OR
  379.  
  380.  
  381. Callback procedures for asynchronous sockets.
  382.  
  383. Currently asynchronous sockets notify processes of socket events
  384. by sending a Window message.  I would like to see asynchronous
  385. socket have the option to call a callback routine OR send a 
  386. window message.  This functionality would make asynchronous C++
  387. socket objects work much better...
  388.  
  389.  
  390. Ross Wolin
  391. rwolin@suneast.sun.com
  392. "Ni!"
  393. ????
  394. ????
  395. From calypso-2.oit.unc.edu!winsock-hackers Mon Feb  7 15:46:59 1994
  396. Date: Mon, 7 Feb 1994 18:39:36 -0500
  397. Message-Id: <9402072350.AA04134@atlas>
  398. Reply-To: paul@atlas.abccomp.oz.au
  399. Originator: winsock-hackers@sunsite.unc.edu
  400. Sender: winsock-hackers@calypso-2.oit.unc.edu
  401. From: paul@atlas.abccomp.oz.au
  402. To: Multiple recipients of list <winsock-hackers@sunsite.unc.edu>
  403. Subject: Winsock v2
  404. X-Listprocessor-Version: 6.0a -- ListProcessor by Anastasios Kotsikonas
  405. Status: ORP
  406. History: Replied to on 18 Feb 94
  407.  
  408. So we're well into the new year. Is discussion of features/changes
  409. for v2 going to take place on this winsock-hackers list, or on another list
  410. I don't yet know about?
  411.  
  412.  
  413. -- 
  414. Paul Brooks              |paul@abccomp.oz.au       |Emerging Standard:
  415. TurboSoft Pty Ltd        |pwb@newt.phys.unsw.edu.au|  one that has not yet
  416. 579 Harris St., Ultimo   |                         |  been superseded.
  417. Sydney Australia 2007    |ph: +61 2 281 3155       |  
  418. ????
  419. ????
  420. From halon.sybase.com!sybase.com!william Tue Feb  8 12:13:46 1994
  421. From: William Wong <william@sybase.com>
  422. Message-Id: <9402082013.AA23594@mercury.sybgate.sybase.com>
  423. Subject: Windows Sockets 2 Contribution
  424. To: martinh@jsbus.com
  425. Date: Tue, 8 Feb 94 12:13:22 PST
  426. X-Mailer: ELM [version 2.3 PL0]
  427. content-length: 348
  428. Status: OR
  429.  
  430. Winsock 2.0 should add support for BOTH RFC 793 and RFC 1122 styles of 
  431. Out-Of-Band data.
  432.  
  433. Most Unix TCP/IPs use RFC 793 Out-Of-Band data, e.g. Sun4, HP, RS6000, etc.
  434. However, Solaris is getting popular and it is using RFC 1122 OOB.  Winsock
  435. 2.0 implementation should support both and make it user configurable to switch
  436. between the two.
  437.  
  438. William
  439.  
  440. ????
  441. ????
  442. From relay1.uu.net!netmanage.com!tmima Wed Feb  9 16:40:34 1994
  443. Message-Id: <Chameleon.940209175520.tmima@tmima2.netmanage.com>
  444. Date: Wed,  9 Feb 94 17:44:42 PST
  445. Reply-To: Tmima Koren <tmima@netmanage.com>
  446. From: Tmima Koren <tmima@netmanage.com>
  447. To: Martin Hall <martinh@jsbus.com>
  448. Subject: Windows Sockets 2 Contribution
  449. Status: OR
  450.  
  451.  
  452. shared sockets
  453.  
  454. Set 'shared' attribute to a socket, maybe with setsockopt(). 
  455. A shared socket can be passed and used by all tasks.
  456.  
  457.  
  458.  
  459. ????
  460. ????
  461. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 10:58:05 1994
  462. Date: Thu, 10 Feb 94 14:09:49 EST
  463. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  464. Subject: re:Windows Sockets 2 Contribution
  465. To: martinh@jsbus.com
  466. Cc: 
  467. Bcc: 
  468. Message-ID:  <9402101058.aa15682@jsbus.jsbus.com>
  469. Status: OR
  470.  
  471.  
  472.  
  473. I would like to see the spec address concurrent access of multiple address 
  474. families in a coherent (common across all implementations) way.
  475.  
  476. Currently, on DOS/Windows 3.1 it is necessary for an APP to use
  477. LoadLibrary(), 
  478. and GetProcAddress() in order to concurrently access winsock.dll's from 
  479. multiple providers providing support for different address families.  There 
  480. should be a standard mechanism.
  481.  
  482. procopio@banyan.com
  483.  
  484. ????
  485. ????
  486. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 10:59:47 1994
  487. Date: Thu, 10 Feb 94 14:12:19 EST
  488. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  489. Subject: re:Windows Sockets 2 Contribution
  490. To: martinh@jsbus.com
  491. Cc: 
  492. Bcc: 
  493. Message-ID:  <9402101059.aa15843@jsbus.jsbus.com>
  494. Status: OR
  495.  
  496.  
  497. The semantics of alternate address families need to be defined.
  498.  
  499. Currently, the winsock semantic definition is restricted to TCP/IP.  It needs 
  500. to address other address families as well: IPX/SPX, ISO, etc..
  501.  
  502. procopio@banyan.com
  503.  
  504.  
  505. ????
  506. ????
  507. From magnolia.banyan.com!banyan!eng!mike=procopio Thu Feb 10 11:04:27 1994
  508. Date: Thu, 10 Feb 94 14:16:08 EST
  509. From: Mike=Procopio%Eng%Banyan@magnolia.banyan.com
  510. Subject: re:Windows Sockets 2 Contribution
  511. To: martinh@jsbus.com
  512. Cc: 
  513. Bcc: 
  514. Message-ID:  <9402101104.aa16117@jsbus.jsbus.com>
  515. Status: OR
  516.  
  517.  
  518. Winsock should be enlarged to provide the concept of "in-system" usage.
  519.  
  520. Currently, winsock defines an API restricted to windows applications.  There 
  521. is a real need for a standard in-system interface as well.  The analogy is 
  522. in-system is to winsock what TPI is to TLI.
  523.  
  524. procopio@banyan,.com
  525.  
  526.  
  527.  
  528. ????
  529. ????
  530. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 11:52:02 1994
  531. Message-Id: <Chameleon.940210130746.tmima@tmima2.netmanage.com>
  532. Date: Wed,  9 Feb 94 17:44:42 PST
  533. Reply-To: Tmima Koren <tmima@netmanage.com>
  534. From: Tmima Koren <tmima@netmanage.com>
  535. To: Martin Hall <martinh@jsbus.com>
  536. Subject: Windows Sockets 2 Contribution
  537. Status: OR
  538.  
  539.  
  540. set/get/remove ARP table entry
  541.  
  542.  
  543.  
  544. ????
  545. ????
  546. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 11:52:43 1994
  547. Message-Id: <Chameleon.940210130845.tmima@tmima2.netmanage.com>
  548. Date: Wed,  9 Feb 94 17:44:42 PST
  549. Reply-To: Tmima Koren <tmima@netmanage.com>
  550. From: Tmima Koren <tmima@netmanage.com>
  551. To: Martin Hall <martinh@jsbus.com>
  552. Subject: Windows Sockets 2 Contribution
  553. Status: OR
  554.  
  555.  
  556. gethostid()
  557.  
  558.  
  559. ????
  560. ????
  561. From relay1.uu.net!netmanage.com!tmima Thu Feb 10 12:34:01 1994
  562. Message-Id: <Chameleon.940210134945.tmima@tmima2.netmanage.com>
  563. Date: Wed,  9 Feb 94 17:44:42 PST
  564. Reply-To: Tmima Koren <tmima@netmanage.com>
  565. From: Tmima Koren <tmima@netmanage.com>
  566. To: Martin Hall <martinh@jsbus.com>
  567. Subject: Windows Sockets 2 Contribution
  568. Status: OR
  569.  
  570.  
  571. raw ICMP/IP
  572.  
  573.  
  574.  
  575. ????
  576. ????
  577. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:24:39 1994
  578. From: Vikas Garg <vikas@next.distinct.com>
  579. Message-Id: <9402141929.AA02003@distinct.com>
  580. Subject: Windows Socket 2.0 Contributions
  581. To: Martin Hall <martinh@jsbus.com>
  582. Date: Mon, 14 Feb 1994 11:29:03 -0800 (PST)
  583. Cc: Oliver Spaeth <oliver@distinct.com>
  584. X-Mailer: ELM [version 2.4 PL23]
  585. Content-Type: text
  586. Content-Length: 691       
  587. Status: OR
  588.  
  589. RAW SOCKETS
  590.  
  591. Some level of support for the raw sockets should be included in 
  592. the specs. Wether the access is to be at the ICMP level or the 
  593. IP level should also be clarified.
  594.  
  595. You must me sick of this request by now, so I will leave it at 
  596. this :-)
  597.  
  598. Vikas
  599. -- 
  600. ==========================================================
  601. Vikas Garg                     Phone : (408) 741-0781         
  602. Distinct Corp.                 Fax   : (408) 741-0795         
  603. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  604. Saratoga, CA 95070                                          
  605. U.S.A.                                                      
  606. ==========================================================
  607. ????
  608. ????
  609. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:36:51 1994
  610. From: Vikas Garg <vikas@next.distinct.com>
  611. Message-Id: <9402141941.AA02022@distinct.com>
  612. Subject: Windows Socket 2.0 Contributions
  613. To: Martin Hall <martinh@jsbus.com>
  614. Date: Mon, 14 Feb 1994 11:41:12 -0800 (PST)
  615. Cc: Oliver Spaeth <oliver@distinct.com>
  616. X-Mailer: ELM [version 2.4 PL23]
  617. Content-Type: text
  618. Content-Length: 976       
  619. Status: OR
  620.  
  621. WSAAsyncSelect()
  622.  
  623. At this point in time I am sick of all the FD_@#$% discussions, whatever
  624. way they are supposed to be posted, PLEASE remove the ambiguities.
  625. i)   Should FD_CLOSE be posted when the connection goes into the 
  626.      FIN_WAIT state or when it goes into the FIN_WAIT state AND there
  627.      is no data to be read.
  628. ii)  Should FD_CLOSE be posted once only or for every WSAAsyncSelect call?
  629. iii) Should FD_WRITE be posted only on connect() or accept() or also when 
  630.      WSAAsyncSelect() is called AFTER a successful connect() or accept().
  631.  
  632. ==========================================================
  633. Vikas Garg                     Phone : (408) 741-0781         
  634. Distinct Corp.                 Fax   : (408) 741-0795         
  635. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  636. Saratoga, CA 95070                                          
  637. U.S.A.                                                      
  638. ==========================================================
  639. ????
  640. ????
  641. From netcom3.netcom.com!next.distinct.com!vikas Mon Feb 14 11:41:49 1994
  642. From: Vikas Garg <vikas@next.distinct.com>
  643. Message-Id: <9402141945.AA02036@distinct.com>
  644. Subject: Windows Socket 2.0 Contributions
  645. To: Martin Hall <martinh@jsbus.com>
  646. Date: Mon, 14 Feb 1994 11:45:09 -0800 (PST)
  647. Cc: Oliver Spaeth <oliver@distinct.com>
  648. X-Mailer: ELM [version 2.4 PL23]
  649. Content-Type: text
  650. Content-Length: 541       
  651. Status: OR
  652.  
  653. Sharing of Sockets among applications
  654.  
  655. The topic says it all, you must be sick of this request also.
  656.  
  657. Vikas
  658. -- 
  659. ==========================================================
  660. Vikas Garg                     Phone : (408) 741-0781         
  661. Distinct Corp.                 Fax   : (408) 741-0795         
  662. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  663. Saratoga, CA 95070                                          
  664. U.S.A.                                                      
  665. ==========================================================
  666. ????
  667. ????
  668. From mail.netcom.com!next.distinct.com!vikas Mon Feb 14 11:44:52 1994
  669. From: Vikas Garg <vikas@next.distinct.com>
  670. Message-Id: <9402141949.AA02047@distinct.com>
  671. Subject: Windows Socket 2.0 Contributions
  672. To: Martin Hall <martinh@jsbus.com>
  673. Date: Mon, 14 Feb 1994 11:49:09 -0800 (PST)
  674. Cc: Oliver Spaeth <oliver@distinct.com>
  675. X-Mailer: ELM [version 2.4 PL23]
  676. Content-Type: text
  677. Content-Length: 919       
  678. Status: OR
  679.  
  680. Multiple Versions
  681.  
  682. Now that the situation to have multiple versions actually 
  683. exists, can a winsock dll support multiple versions??
  684. I would recommend against it since it can cause a lot of
  685. headaches if an application is using 2.0 and an intermediate
  686. DLL is using 1.1. 
  687. If multiple version support is to be allowed, then please 
  688. clarify how this problem is to be resolved also the version
  689. requested should not be ignored in subsequent calls to 
  690. WSAStartup (page 108 second para.)
  691.  
  692. Vikas
  693. -- 
  694. ==========================================================
  695. Vikas Garg                     Phone : (408) 741-0781         
  696. Distinct Corp.                 Fax   : (408) 741-0795         
  697. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  698. Saratoga, CA 95070                                          
  699. U.S.A.                                                      
  700. ==========================================================
  701. ????
  702. ????
  703. From netcom3.netcom.com!next.distinct.com!vikas Mon Feb 14 11:48:01 1994
  704. From: Vikas Garg <vikas@next.distinct.com>
  705. Message-Id: <9402141951.AA02058@distinct.com>
  706. Subject: Windows Sockets 2.0 Contributions
  707. To: Martin Hall <martinh@jsbus.com>
  708. Date: Mon, 14 Feb 1994 11:51:16 -0800 (PST)
  709. X-Mailer: ELM [version 2.4 PL23]
  710. Content-Type: text
  711. Content-Length: 666       
  712. Status: OR
  713.  
  714. Hosts List
  715.  
  716. Some standard way for the applications to retrieve the list
  717. of available hosts. Maybe a function that returns the hosts
  718. as a linked list, or a standard way of saving the hosts in 
  719. a file in the windows directory.
  720.  
  721. Vikas
  722.  
  723. -- 
  724. ==========================================================
  725. Vikas Garg                     Phone : (408) 741-0781         
  726. Distinct Corp.                 Fax   : (408) 741-0795         
  727. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  728. Saratoga, CA 95070                                          
  729. U.S.A.                                                      
  730. ==========================================================
  731. ????
  732. ????
  733. From netcom3.netcom.com!next.distinct.com!vikas Tue Feb 15 21:30:11 1994
  734. From: Vikas Garg <vikas@next.distinct.com>
  735. Message-Id: <9402160115.AA04352@distinct.com>
  736. Subject: Windows Socket 2.0 Contribution
  737. To: Martin Hall <martinh@jsbus.com>
  738. Date: Tue, 15 Feb 1994 17:15:17 -0800 (PST)
  739. X-Mailer: ELM [version 2.4 PL23]
  740. Content-Type: text
  741. Content-Length: 799       
  742. Status: ORP
  743. History: Replied to on 18 Feb 94
  744.  
  745. Yielding by an application
  746.  
  747. Can an application sit in a tight loop waiting on a select()
  748. without yielding control at all? The current specs say that 
  749. this is illegal, however lot of applications (including WSAT)
  750. use this programming model. I hope we can either clarify it
  751. a bit more in the next version, or remove the requirement for
  752. applications to yield...
  753.  
  754. Vikas
  755. -- 
  756. ==========================================================
  757. Vikas Garg                     Phone : (408) 741-0781         
  758. Distinct Corp.                 Fax   : (408) 741-0795         
  759. 12901 Saratoga Ave., Ste. 4    E-Mail: vikas@distinct.com     
  760. Saratoga, CA 95070                                          
  761. U.S.A.                                                      
  762. ==========================================================
  763. ????
  764. ????
  765. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  766. 13:28:25 1994
  767. Date: Wed, 16 Feb 94 13:34:32 PST
  768. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  769. Message-ID: <940216133432_8@ccm.hf.intel.com>
  770. To: martinh@jsbus.com
  771. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  772. Subject: Input for Winsock ver 2
  773. Status: OR
  774.  
  775.  
  776. Text item: Text_1
  777.  
  778.                                                     02/16/94
  779. Dear Martin,
  780.  
  781. Intel is pleased to supply the following input to the Winsock 2
  782. definition process. There are 10 proposals in all, with this submittal
  783. corresponding to proposal number 1.
  784.  
  785. For each of our proposals we supply a desciption of the proposed
  786. extension, our motivations for making the extension proposal, and the
  787. detailed syntax for how the extension might be implemented.
  788.  
  789. We would also like to volunteer our services to assist in the process
  790. of collating and summarizing the various submitals that are coming in
  791. from Forum members.  Please let us know how we can best assist you in
  792. this process.
  793.  
  794. Regards,
  795.  
  796. David B. Andersen
  797. Intel Architecture Labs
  798.  
  799.  
  800. Extension #1:
  801.      Replace vendor-specific Winsock.DLLs with a single DLL
  802.  
  803. Description:
  804. Existing Winsock implementations are all vendor-specific
  805. since no standard interface is defined for the interface
  806. between Winsock.DLL and protocol stacks.  Version 2 of
  807. Winsock should change the model by defining such an
  808. interface (subsequently referred to as a Service Provider
  809. Interface or SPI).
  810.  
  811. Motivation:
  812. Some level of ambiguity remains in the current version of
  813. the Winsock spec which results in subtle but sometimes
  814. crucial differences in how various Winsock implementations
  815. behave.  Having a single Winsock DLL would ensure more
  816. uniform behavior, while allowing stack vendors to avoid
  817. duplication of effort.  (Let's free up  their resources so
  818. they can concentrate on improved versions of their stacks!)
  819.  
  820. This also paves the way for multiprotocol support as
  821. outlined in our proposed extension #2.
  822.  
  823. Semantics:
  824. A Winsock SPI specification would need to be created.   An
  825. ini file will also need to be defined for the Winsock DLL
  826. which would provide it with the information requried to
  827. discover what underlying stacks were present and enable them
  828. to be loaded as required.  Intel is prepared to make
  829. additional suggestions for a  SPI specification and ini file
  830. format if the forum wishes to pursue this proposal further.
  831.  
  832. ????
  833. ????
  834. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  835. 13:31:23 1994
  836. Date: Wed, 16 Feb 94 13:37:09 PST
  837. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  838. Message-ID: <940216133709_4@ccm.hf.intel.com>
  839. To: martinh@jsbus.com
  840. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  841. Subject: Input for Winsock ver 2  
  842. Status: OR
  843.  
  844.  
  845. Text item: Text_1
  846.  
  847.                                                     02/16/94
  848. Dear Martin,
  849.  
  850. Intel is pleased to supply the following input to the Winsock 2
  851. definition process. There are 10 proposals in all, with this submittal
  852. corresponding to proposal number 2.
  853.  
  854. For each of our proposals we supply a desciption of the proposed
  855. extension, our motivations for making the extension proposal, and the
  856. detailed syntax for how the extension might be implemented.
  857.  
  858. We would also like to volunteer our services to assist in the process
  859. of collating and summarizing the various submitals that are coming in
  860. from Forum members.  Please let us know how we can best assist you in
  861. this process.
  862.  
  863. Regards,
  864.  
  865. David B. Andersen
  866. Intel Architecture Labs
  867.  
  868.  
  869. Extension #2:
  870.      Support multiple transport protocols simultaneously
  871.  
  872. Description:
  873. The Winsock interface should be generalized so as to provide
  874. access to any transport layer protocol.  Furthermore, this
  875. should be done in such a way that at single app may have
  876. simultaneous access to multiple protocol stacks.  While a
  877. unified addressing scheme that works across all protocols
  878. would also be desirable, so too would solving world hunger.
  879. For pragmatic reasons we suggest that Winsock version 2 not
  880. try and include a universal addressing model.  Rather, it
  881. should be entirely neutral with respect to the addressing
  882. format of each underlying transport protocol.
  883.  
  884. Motivation:
  885. While TCP/IP is an essential protocol stack, in the PC space
  886. there are many others that are very important as well (e.g.
  887. IPX, NetBIOS, DECNET, Vines, etc.).  Application developers
  888. should not be required to utilize multiple APIs in order to
  889. host their application on multiple transports.  Similarly,
  890. it is very possible that the server side of a client/server
  891. application may need to support various clients that do not
  892. all utilize the same transport protocol.
  893.  
  894. Semantics:
  895. This proposal also requires that a SPI and ini file format
  896. be defined for Winsock as mentioned in our proposed
  897. extension #1.  Intel is prepared to make additional
  898. suggestions for a  SPI specification and ini file format if
  899. the forum wishes to pursue this proposal further.
  900.  
  901. Implementation of this suggestion would also require that
  902. the API verbage be carefully edited to remove the existing
  903. bias towards and assumption of TCP/IP.  A few new functions
  904. are needed  to allow an application to evaluate the
  905. available transport choices and determine which transport to
  906. use when creating new sockets or using the getXbyY database
  907. routines.
  908.  
  909. We propose the creation of a new WSA function for
  910. enumerating through the various service providers.  Syntax
  911. is as follows:
  912.  
  913.  
  914.    int PASCAL FAR WSAEnumProviders ( FARPROC lpfnCallback, int
  915. iAddressFamily);
  916.    
  917.           lpfnCallback   Specifies the procedure instance
  918.                     address of the callback function to be
  919.                     invoked by Winsock.DLL for each Service
  920.                     Provider.
  921.           
  922.           iAddressFamily Specifies the address family that
  923.                     any enumerated Service Provider should
  924.                     support.  This can be used as a filter,
  925.                     so that an application can get a list of
  926.                     Service Providers that support, e.g.,
  927.                     AF_INET addresses.  To get a list of
  928.                     every Service Provider, this parameter
  929.                     should be zero.
  930.  
  931.           This function is used to enumerate the Service
  932.           Providers registered with and therefore accessible
  933.           from the Winsock.DLL.  It allows a descriptive
  934.           text string, Service Provider Key, address family,
  935.           socket types, and length of the address (in bytes)
  936.           for each registered Service Provider to be
  937.           retrieved.
  938.           
  939.           WSAEnumProviders() uses the standard Windows
  940.           enumeration procedure using a "callback" function.
  941.           The callback function is called once for each
  942.           Service Provider registered in the "Winsock.ini"
  943.           that matches the address family.  This will be
  944.           repeated until either the callback function
  945.           returns zero or the end of the list of Service
  946.           Providers is reached.
  947.           
  948.           The prototype of the callback function is as
  949.           follows:
  950.           
  951.       int PASCAL FAR CallbackFunc( LPSTR lpszDescription, char FAR *
  952.           ProviderKey, int iAddressFamily, int FAR * lpSocketType, 
  953.                   int iAddressLength );
  954.           
  955.           CallbackFunc is a placeholder for the application-
  956.           supplied function name.  The actual callback
  957.           function must reside in a DLL or application
  958.           module and be exported in the module definition
  959.           file.  You must use MakeProcInstance() to get a
  960.           procedure-instance address for the callback
  961.           function.  The callback function must return
  962.           nonzero to continue enumeration; to stop
  963.           enumeration, it must return zero.
  964.           
  965.           lpSocketType points to a 0-terminated integer
  966.           array indicating all the socket types supported by
  967.           the Service Provider identified by ProviderKey
  968.           along with a text description lpszDescription.
  969.           The address family supported by the Service
  970.           Provider is specified by iAddressFamily, and the
  971.           (maximum) length of the address (in bytes) by
  972.           iAddressSize, which allows applications to
  973.           allocate a big enough buffer for address in this
  974.           address family.
  975.  
  976. In addition, we propose a new WSA function to allow an
  977. application to specify a particular service provider to use
  978. when creating new sockets and when accessing the getXbyY
  979. database routines.  Syntax for this function is as follows:
  980.  
  981.      int PASCAL FAR WSAProviderSelection ( char FAR * ProviderKey );
  982.           
  983.           ProviderKey    The Key of the Service Provider to
  984.                               be selected.
  985.  
  986. Remarks   This function selects the Service Provider to be
  987.           used for the current task until the next
  988.           invocation of this function.  Winsock functions
  989.           which may be affected by this function include
  990.           socket(), getXbyY(), and WSAAsyncGetXByY().
  991.           Applications can eliminate any pre-selected
  992.           Service Provider by setting ProviderKey to be
  993.           NULL.  This indicates to the Winsock DLL that it
  994.           should determine for itself which service provider
  995.           to use based on the socket type and address family
  996.           parameters to the socket() call.  Whenever this
  997.           function is used to set the provider selection to
  998.           NULL, the default database provider as specified
  999.           in the Winsock ini file is used for getXbyY
  1000.           functions.  The provider keys of Service Providers
  1001.           can be obtained by using WSAEnumProviders().
  1002.  
  1003. Finally, it is necessary to ignore the value of the
  1004. iMaxUdpDg field in the WSAData structure which is obtained
  1005. via the WSAStartup() function.  As a replacement for this,
  1006. we propose a new get-only socket option: SO_MAX_DG_SIZE.
  1007.  
  1008. ????
  1009. ????
  1010. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  1011. 13:36:00 1994
  1012. Date: Wed, 16 Feb 94 13:42:10 PST
  1013. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1014. Message-ID: <940216134210_2@ccm.hf.intel.com>
  1015. To: martinh@jsbus.com
  1016. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1017. Subject: Input for Winsock ver 2
  1018. Status: OR
  1019.  
  1020.  
  1021. Text item: Text_1
  1022.  
  1023.                                                     02/16/94
  1024. Dear Martin,
  1025.  
  1026. Intel is pleased to supply the following input to the Winsock 2
  1027. definition process. There are 10 proposals in all, with this submittal
  1028. corresponding to proposal number 3.
  1029.  
  1030. For each of our proposals we supply a desciption of the proposed
  1031. extension, our motivations for making the extension proposal, and the
  1032. detailed syntax for how the extension might be implemented.
  1033.  
  1034. We would also like to volunteer our services to assist in the process
  1035. of collating and summarizing the various submitals that are coming in
  1036. from Forum members.  Please let us know how we can best assist you in
  1037. this process.
  1038.  
  1039. Regards,
  1040.  
  1041. David B. Andersen
  1042. Intel Architecture Labs
  1043.  
  1044.  
  1045. Extension #3:
  1046.      Expand the list of socket types and adopt a more
  1047.         desriptive naming convention
  1048.  
  1049. Description:
  1050. If Winsock provides access to  protocols other than TCP/IP
  1051. it will need to support more than just the SOCK_DGRAM and
  1052. SOCK_STREAM socket types.  We  propose an expanded set of
  1053. socket types that utilize a more descriptive and uniform
  1054. naming convention.  We do not advocate that service
  1055. providers be required to support all or any particular set
  1056. of socket types, with the exception that support for raw
  1057. sockets (SOCK_RAW) should be mandatory.  Some of the
  1058. communications properties which should be supported are:
  1059. connectedness, reliability, preservation of transmission
  1060. boundaries, directionality and isochronicity.
  1061.  
  1062. Motivation:
  1063. Sockets are typed according to the communication properties
  1064. visible to a user.  Socket type names should be chosen to
  1065. reflect the essential attributes of the corresponding
  1066. socket.  Other transport protocols support communications
  1067. properties different from those available within TCP/IP.  In
  1068. particular, protocol stacks that are optimized for real-time
  1069. multimedia applications have unique properties which must be
  1070. accessible to an application.
  1071.  
  1072. Proposed Semantics:
  1073. We propose that socket type naming be based on the following
  1074. convention:
  1075.  
  1076.      SOCK_RAW or
  1077.      SOCK_ [ REL | UNREL ][ _ISOCH ][ _UNISEND | _UNIRECV ]
  1078.            [_STREAM | _DGRAM |  _DSTREAM ]
  1079.  
  1080.  
  1081. Raw sockets provide a mechanism to bypass the usual protocol
  1082. layers and are very much dependent on the particulars of
  1083. each service provider.  Service providers should be required
  1084. to support raw sockets.
  1085.  
  1086. [ REL | UNREL ] indicates whether or not the socket provides
  1087. reliable communication.  Reliability  implies that the
  1088. transport will ensure that all transmitted information
  1089. arrives at the remote end or, failing in its attempts to
  1090. accomplish this,  will inform the application that reliable
  1091. communication with the designated endpoint is currently not
  1092. possible.
  1093.  
  1094. [ _ISOCH ] indicates that the socket supports isochronous
  1095. communications in which the time intervals between
  1096. successive transmissions are (apparently) maintained
  1097. throughout the network and reflected at the receiving end.
  1098.  
  1099. [ _UNISEND | _UNIRECV ] restricts a socket to be uni-
  1100. directional and allows only send or receive operations as
  1101. indicated.   Otherwise, all sockets are bi-directional.
  1102.  
  1103. [ _STREAM | _DSTREAM | _DGRAM ] indicates whether the socket
  1104. is connection-oriented (STREAM and DSTREAM) or
  1105. connectionless (DGRAM).  Connection-oriented, stream style
  1106. sockets guarantee that information arriving at the receiving
  1107. application will appear in correct sequence and without
  1108. duplication.  Note that this does not imply reliability
  1109. (guaranteeing that all of the information will arrive).
  1110. Rather it ensures that information which does arrive will be
  1111. unduplicated and in correct sequence.   Connectionless
  1112. sockets (DGRAM), do not possess stream attributes and hence
  1113. may provide information which is duplicated and/or out of
  1114. sequence.  The difference between a STREAM and a DSTREAM
  1115. socket is that message boundaries are not preserved in the
  1116. former(i.e. a byte stream) and are preserved in the latter
  1117. (i.e. a message stream).
  1118.  
  1119. Using this naming convention for socket types, the two
  1120. styles of communication supported by TCP/IP (TCP streams and
  1121. UDP datagrams) would be referred to as SOCK_REL_STREAM and
  1122. SOCK_UNREL_DGRAM respectively.  To maintain compatibility
  1123. with existing socket-based applications, the Winsock header
  1124. file would include alias definitions for the familiar
  1125. SOCK_STREAM and SOCK_DGRAM socket types.
  1126.  
  1127. ????
  1128. ????
  1129. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Wed Feb 16
  1130. 13:38:06 1994
  1131. Date: Wed, 16 Feb 94 13:43:26 PST
  1132. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1133. Message-ID: <940216134326_4@ccm.hf.intel.com>
  1134. To: martinh@jsbus.com
  1135. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1136. Subject: Input for Winsock ver 2
  1137. Status: OR
  1138.  
  1139.  
  1140. Text item: Text_1
  1141.  
  1142.                                                     02/16/94
  1143. Dear Martin,
  1144.  
  1145. Intel is pleased to supply the following input to the Winsock 2
  1146. definition process. There are 10 proposals in all, with this submittal
  1147. corresponding to proposal number 4.
  1148.  
  1149. For each of our proposals we supply a desciption of the proposed
  1150. extension, our motivations for making the extension proposal, and the
  1151. detailed syntax for how the extension might be implemented.
  1152.  
  1153. We would also like to volunteer our services to assist in the process
  1154. of collating and summarizing the various submitals that are coming in
  1155. from Forum members.  Please let us know how we can best assist you in
  1156. this process.
  1157.  
  1158. Regards,
  1159.  
  1160. David B. Andersen
  1161. Intel Architecture Labs
  1162.  
  1163.  
  1164. Extension #4:
  1165.      Provide a means for sockets to be shared across applications
  1166.  
  1167. Description:
  1168. We believe it is essential that a paradigm for socket
  1169. sharing be available in Winsock that is applicable to Win
  1170. 3.1 as well as the Chicago and NT environments.  We are
  1171. uncomfortable with the approach of simply declaring that
  1172. socket values must be globally unique while removing any
  1173. existing checks that force the using and owning tasks to be
  1174. the same.  In environments such as Chicago and NT a socket
  1175. can be used as a file descriptor and we must assume,
  1176. therefore, that like file descriptors, socket values will
  1177. only have meaning within the context of the owning task.
  1178.  
  1179. Motivation:
  1180. Shared sockets have been frequently referred to on the net
  1181. as a desirable feature for version 2.  In our own work with
  1182. multimedia communications we have run across numerous
  1183. instances where this capability would lead to simplified
  1184. implementation.
  1185.  
  1186. Semantics:
  1187. We propose a new construct, which we refer to as a "virtual
  1188. socket", as a mechanism to avoid these difficulties.
  1189. Virtual socket are created in the context of the source task
  1190. by supplying an existing, local socket descriptor and a
  1191. handle to the target task (which could be the same task as
  1192. the source task) for which the virtual socket will be used:
  1193.  
  1194.      
  1195.      SOCKET  vs ;
  1196.      
  1197.      vs =  WSADuplicateSocket( SOCKET s, HTASK hTargetTask );
  1198.      
  1199.      
  1200. To get the target task's handle, it will generally  be
  1201. necessary to use some form of interprocess communication
  1202. (IPC), e.g., DDE and PostAppMessgage () in Windows 3.1, or
  1203. named pipe and shared memory in Windows NT.  Since vs is
  1204. only valid in the context of the target task, the source
  1205. task must pass the value of the virtual socket to the target
  1206. task, also via your favorite IPC mechanism.
  1207.  
  1208. Virtual sockets may be used in all places where regular
  1209. sockets are used and are, in fact, indistinguishable from
  1210. them.  Virtual sockets derived from a common underlying
  1211. socket share all aspects of the underlying shared socket
  1212. with the exception of the notification mechanism.  Reference
  1213. counting is employed to ensure that the underlying shared
  1214. socket is not closed until the last virtual socket is
  1215. closed.
  1216.  
  1217. Since the collection of attributes which comprise a virtual
  1218. socket's option set is shared, setting any socket option may
  1219. have a global effect.  For example, if one task uses
  1220. ioctlsocket() on a virtual socket to set it into non-
  1221. blocking mode, this change is visible to all of the virtual
  1222. sockets that reference the underlying shared socket.
  1223.  
  1224.  Each virtual socket has an independent notification
  1225. mechanism which conforms to the usual Winsock conventions.
  1226. For example, two tasks may wish to share a socket and
  1227. operate in a cooperative fashion where one is the sender and
  1228. the other the receiver.  Each task may arrange for
  1229. notification appropriate to its role.  In the pathological
  1230. case of two or more tasks sharing an underlying socket and
  1231. each requesting asynchronous notification  when data is
  1232. ready to be read (foolish thing to do that this may be), all
  1233. such tasks will receive their stipulated message in an
  1234. unspecified sequence.  The first task to perform a read will
  1235. get some or all of the available data, the others will get
  1236. what's left, if any.  In other words, in all cases it is
  1237. completely up to tasks which share a socket to coordinate
  1238. their access to the socket.
  1239.  
  1240. As an interesting aside, we note that simply invoking the
  1241. WSADuplicateSocket() function on a socket s, causes s itself
  1242. to become a virtual socket which references the original
  1243. (and now underlying) socket.
  1244.  
  1245.  
  1246. ????
  1247. ????
  1248. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:42:39 1994
  1249. Date: Thu, 17 Feb 94 15:49:16 PST
  1250. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1251. Message-ID: <940217154916_7@ccm.hf.intel.com>
  1252. To: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM, martinh@jsbus.com
  1253. Subject: Input for Winsock ver 2
  1254. Status: OR
  1255.  
  1256.  
  1257. Text item: Text_1
  1258.  
  1259.                                                     02/17/94
  1260. Dear Martin,
  1261.  
  1262. Intel is pleased to supply the following input to the Winsock 2
  1263. definition process. There are 10 proposals in all, with this submittal
  1264. corresponding to proposal number 5.
  1265.  
  1266. For each of our proposals we supply a desciption of the proposed
  1267. extension, our motivations for making the extension proposal, and the
  1268. detailed syntax for how the extension might be implemented.
  1269.  
  1270. We would also like to volunteer our services to assist in the process
  1271. of collating and summarizing the various submitals that are coming in
  1272. from Forum members.  Please let us know how we can best assist you in
  1273. this process.
  1274.  
  1275. Regards,
  1276.  
  1277. David B. Andersen
  1278. Intel Architecture Labs
  1279.  
  1280.  
  1281. Extension #5:
  1282.      Provide support for protocol stacks which allow send()
  1283.      and recv() operations within interrupt context.
  1284.  
  1285. Description:
  1286. Some transport stacks allow an application to minimize
  1287. latency and maximize throughput by invoking the send and
  1288. receive operations from within interrupt context. A means
  1289. should be provided to determine which transport stacks
  1290. support this capability.  Also the application must have a
  1291. means to indicate to the Winsock DLL that a particular send
  1292. or receive invocation is occurring within interrupt context.
  1293.  
  1294. Motivation:
  1295. Apps which send media streams over communications channels
  1296. are often very sensitive to latency variations.  By
  1297. supporting send and receive operations in interrupt context
  1298. the amount of variance in perceived latency can be
  1299. minimized.  Also, by supporting this capability at the API
  1300. level, we encourage more stack vendors to support this
  1301. feature.
  1302.  
  1303. Semantics:
  1304. We propose that a new get-only socket option be defined:
  1305. SO_INTERRUPT.  This option would be used by a service
  1306. provider to indicate whether or not it supported interrupt
  1307. context operations.  Also, we propose the definition of an
  1308. additional bit in the flags parameter used with send(),
  1309. sendto(), recv() and recvfrom().  This bit would be called
  1310. MSG_INTERRUPT and would be used by the app to indicate to
  1311. the Winsock DLL that the particular send or receive
  1312. operation was being performed in interrupt context.
  1313.  
  1314.  
  1315. ????
  1316. ????
  1317. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:45:29 1994
  1318. Date: Thu, 17 Feb 94 15:52:07 PST
  1319. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1320. Message-ID: <940217155207_6@ccm.hf.intel.com>
  1321. To: martinh@jsbus.com
  1322. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1323. Subject: Input for Winsock ver 2
  1324. Status: OR
  1325.  
  1326.  
  1327. Text item: Text_1
  1328.  
  1329.                                                     02/17/94
  1330. Dear Martin,
  1331.  
  1332. Intel is pleased to supply the following input to the Winsock 2
  1333. definition process. There are 10 proposals in all, with this submittal
  1334. corresponding to proposal number 6.
  1335.  
  1336. For each of our proposals we supply a desciption of the proposed
  1337. extension, our motivations for making the extension proposal, and the
  1338. detailed syntax for how the extension might be implemented.
  1339.  
  1340. We would also like to volunteer our services to assist in the process
  1341. of collating and summarizing the various submitals that are coming in
  1342. from Forum members.  Please let us know how we can best assist you in
  1343. this process.
  1344.  
  1345. Regards,
  1346.  
  1347. David B. Andersen
  1348. Intel Architecture Labs
  1349.  
  1350.  
  1351. Extension #6:
  1352.      Provide callback notification
  1353.  
  1354. Description:
  1355. Applications should be able to select a callback style of
  1356. notification in addition to the current Windows message
  1357. based notification mechanism.  This would be the only
  1358. notification mechanism available for apps that perform send
  1359. and receive operation from within interrupt context.
  1360.  
  1361. The callback notification method should also allow an
  1362. application to supply an uninterpreted token as a parameter
  1363. to the notification request function, which is subsequently
  1364. returned to the app as a parameter of the callback function.
  1365.  
  1366. Motivation:
  1367. This is being proposed primarily as a means to support
  1368. interrupt context send and receive operations.  However,
  1369. significant additional value is added by including the user
  1370. supplied token.
  1371.  
  1372. Semantics:
  1373. We propose the a new WSA function be defined for requesting
  1374. callback notification:
  1375.  
  1376. int PASCAL FAR WSACallbackSelect ( SOCKET s, FARPROC lpfnCallback,
  1377.           DWORD dwCallbackData,  long lEvent );
  1378.  
  1379.           
  1380.           s          A descriptor identifying the socket for
  1381.                     which event notification is required.
  1382.           
  1383.           lpfnCallback   The procedure instance address of
  1384.                     the callback function to be invoked by
  1385.                     Winsock.DLL whenever a registered
  1386.                     network event happens.
  1387.           
  1388.           dwCallbackData A callback data passed back to the
  1389.                     application in the callback.  This
  1390.                     object is not interpreted by Winsock
  1391.                     implementation.
  1392.           
  1393.           lEvent    A bit mask which specifies a combination
  1394.                     of network events in which the
  1395.                     application is interested.
  1396.           
  1397.  
  1398.           This function will enable the function-based
  1399.           callback mechanism for the specified socket.
  1400.           WSACallbackSelect() is designed to get around the
  1401.           potential Windows message delay introduced by the
  1402.           WSAAsyncSelect() mechanism in order to support
  1403.           delay-sensitive applications.  The callback
  1404.           function will be invoked whenever Winsock detects
  1405.           any of the network events specified by the lEvent
  1406.           parameter.  The socket for which notification is
  1407.           required is identified by s.   The dwCallbackData
  1408.           will be passed back to the application along with
  1409.           the callback.
  1410.           
  1411.           This function automatically sets socket s to non-
  1412.           blocking mode.
  1413.           
  1414.           The prototype of the callback function is as
  1415.           follows:
  1416.           
  1417.                VOID PASCAL FAR CallbackFunc( SOCKET s, long
  1418.           lEvent, int    ErrorCode, DWORD dwCallbackData );
  1419.           
  1420.      
  1421.  
  1422. ????
  1423. ????
  1424. From intelhf.intel.com!ccm!david_b_andersen Thu Feb 17 15:45:52 1994
  1425. Date: Thu, 17 Feb 94 15:52:09 PST
  1426. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1427. Message-ID: <940217155209_7@ccm.hf.intel.com>
  1428. To: martinh@jsbus.com
  1429. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1430. Subject: Input for Winsock ver 2
  1431. Status: OR
  1432.  
  1433.  
  1434. Text item: Text_1
  1435.  
  1436.                                                     02/17/94
  1437. Dear Martin,
  1438.  
  1439. Intel is pleased to supply the following input to the Winsock 2
  1440. definition process. There are 10 proposals in all, with this submittal
  1441. corresponding to proposal number 7.
  1442.  
  1443. For each of our proposals we supply a desciption of the proposed
  1444. extension, our motivations for making the extension proposal, and the
  1445. detailed syntax for how the extension might be implemented.
  1446.  
  1447. We would also like to volunteer our services to assist in the process
  1448. of collating and summarizing the various submitals that are coming in
  1449. from Forum members.  Please let us know how we can best assist you in
  1450. this process.
  1451.  
  1452. Regards,
  1453.  
  1454. David B. Andersen
  1455. Intel Architecture Labs
  1456.  
  1457.  
  1458. Extension #7:
  1459.      Socket groups
  1460.  
  1461. Description:
  1462. We propose that the notion of a socket group be introduced
  1463. as a means for an application (or cooperating set of
  1464. applications) to indicate to an underlying service provider
  1465. that a particular set of sockets are related and that the
  1466. group thus formed has certain attributes.  Proposed group
  1467. attributes include relative priorities of the individual
  1468. sockets within the group and a group quality of service
  1469. specification.  A new function is also proposed to allow an
  1470. application to enumerate through the member sockets of a
  1471. group.
  1472.  
  1473. Motivation:
  1474. Applications needing to exchange multiple media streams over
  1475. the network are benefited by being able to establish a
  1476. specific relationship among the set of sockets being
  1477. utilized.  As a minimum this might include a hint to the
  1478. service provider about the relative priorities of the media
  1479. streams being carried.  For example, a conferencing
  1480. application would want to have the socket used for carrying
  1481. the audio stream be given higher priority than that of the
  1482. socket used for the video stream.
  1483.  
  1484. Furthermore, there are transport providers (e.g. digital
  1485. telephony and ATM) which can utilize a group quality of
  1486. service specification to determine the appropriate
  1487. characteristics for the underlying call.  The sockets within
  1488. this group would then be multiplexed in the usual manner
  1489. over this call.  By allowing the application to identify the
  1490. sockets that make up a group and to specify the required
  1491. group attributes, such service providers can operate with
  1492. maximum effectiveness.
  1493.  
  1494. Semantics:
  1495. We propose that the grouping of sockets be performed at the
  1496. time when a connection request is made or when incoming
  1497. socket connections are accepted.  This would include both
  1498. the creation of new groups and the addition of a socket to
  1499. an existing group.  Also, we suggest that two different
  1500. types of groups be supported: constrained and unconstrained.
  1501. In all cases sockets to be grouped must be associated with
  1502. the same service provider.  Sockets joined into an
  1503. unconstrained group may have any host as their destination.
  1504. Sockets joined to a constrained group must all have the same
  1505. host as their destination (although the port number portion
  1506. of their destination addresses may certainly differ).  The
  1507. syntax for a WSA version of connect would be as follows:
  1508.  
  1509. int PASCAL FAR WSAConnectEx ( SOCKET s, const struct sockaddr FAR * name,
  1510.           int namelen, GROUP g, char  FAR * lpSFlowspec, int iSFlowspecLen,
  1511.           char FAR * lpGFlowspec, int iGFlowspecLen );
  1512.           
  1513.           s          A descriptor identifying an unconnected
  1514.                     socket.
  1515.           
  1516.           name      The name of the peer to which the socket
  1517.                     is to be connected.
  1518.           
  1519.           namelen   The length of the name.
  1520.           
  1521.           g         The identifier of the socket group.
  1522.           
  1523.           lpSFlowspec    A pointer to the flow spec for
  1524.                     socket s.
  1525.           
  1526.           iSFlowspecLen  The length of the flow spec for
  1527.                     socket s.  It must be larger than or
  1528.                     equal to the size of struct FLOWSPEC.
  1529.           
  1530.           lpGFlowspec    A pointer to the flow spec for the
  1531.                     socket group to be created, if the value
  1532.                     of parameter g is SG_CONSTRAINED_GROUP.
  1533.           
  1534.           iGFlowspecLen  The length of the flow spec for the
  1535.                     socket group to be created, if the value
  1536.                     of parameter g is SG_CONSTRAINED_GROUP.
  1537.                     It must be larger than or equal to the
  1538.                     size of struct FLOWSPEC.
  1539.  
  1540.           This function is used to create a connection to
  1541.           the specified destination.  For connection-
  1542.           oriented sockets (e.g., type SOCK_STREAM), an
  1543.           active connection is initiated to the foreign host
  1544.           using name (an address in the name space of the
  1545.           socket;).  When the socket call completes
  1546.           successfully, the socket is ready to send/receive
  1547.           data.
  1548.           
  1549.           For a connectionless socket (e.g., type
  1550.           SOCK_UNREL_DGRAM), the operation performed by
  1551.           WSAConnectEx() is merely to establish a default
  1552.           destination address which will be used on
  1553.           subsequent send() and recv() calls.
  1554.           
  1555.           If the socket, s, is unbound, unique values are
  1556.           assigned to the local association by the system,
  1557.           and the socket is marked as bound.  Note that if
  1558.           the address field of the name structure is all
  1559.           zeroes, WSAConnectEx() will return the error
  1560.           WSAEADDRNOTAVAIL.
  1561.           
  1562.           Parameter g is used to indicate the appropriate
  1563.           actions on socket groups:
  1564.            if g is an existing socket group id, add s to
  1565.                          this group, provided all the requirements
  1566.                          set by this group are met; or
  1567.  
  1568.            if g = SG_UNCONSTRAINED_GROUP, create an
  1569.                           unconstrained socket group and have
  1570.                           s as the first member; or
  1571.  
  1572.            if g = SG_CONSTRAINED_GROUP, create a
  1573.                           constrained socket group and have s as
  1574.                           the first member; or
  1575.  
  1576.            if g = NULL, no group operation is performed.
  1577.  
  1578.           For an unconstrained group, any set of sockets may
  1579.           be grouped together as long as they are supported
  1580.           by a single Service Provider and are connection-
  1581.           oriented.  A constrained socket group requires
  1582.           that connections on all grouped sockets be to the
  1583.           same host.  For newly created socket groups, the
  1584.           new group id can be retrieved by using
  1585.           getsockopt() with option SO_GROUP_ID, if this
  1586.           connect operation completes successfully.
  1587.           
  1588.           lpSFlowspec, and iSFlowspecLen specify a block of
  1589.           memory containing the flow spec for socket s, if s
  1590.           is unidirectional and a DSTREAM type socket.
  1591.           Otherwise, these values are ignored.  The first
  1592.           part of this memory block is struct FLOWSPEC,
  1593.           followed by any Service Provider specific data.
  1594.           Thus, iSFlowspecLen must be larger than or equal
  1595.           to the size of struct FLOWSPEC.  A NULL value for
  1596.           lpSFlowspec indicates no application supplied flow
  1597.           spec.
  1598.           
  1599.           lpGFlowspec, and iGFlowspecLen specify a block of
  1600.           memory containing the flow spec for the socket
  1601.           group to be created, if (and only if) the value of
  1602.           parameter g is SG_CONSTRAINED_GROUP.  Otherwise,
  1603.           these values are ignored.  The first part of this
  1604.           memory block is struct FLOWSPEC, followed by any
  1605.           Service Provider specific data.  Thus,
  1606.           iGFlowspecLen must be larger than or equal to the
  1607.           size of struct FLOWSPEC.  A NULL value for
  1608.           lpGFlowspec indicates no application supplied flow
  1609.           spec.
  1610.  
  1611. Similarly, a WSA version of accept is also proposed.  The
  1612. alert reader will note that the proposed function
  1613. incorporates conditional acceptance as well as grouping.
  1614. Conditional acceptance is discussed in greater detail in our
  1615. proposed extension #9.  The syntax is as follows:
  1616.  
  1617. SOCKET PASCAL FAR WSAAcceptEx ( SOCKET s, struct sockaddr
  1618.           FAR * addr, int FAR * addrlen, FARPROC lpfnCondition );
  1619.           
  1620.           s          A descriptor identifying a socket which
  1621.                     is listening for connections after a
  1622.                     listen().
  1623.           
  1624.           addr      An optional pointer to a buffer which
  1625.                     receives the address of the connecting
  1626.                     entity, as known to the communications
  1627.                     layer.  The exact format of the addr
  1628.                     argument is determined by the address
  1629.                     family established when the socket was
  1630.                     created.
  1631.           
  1632.           addrlen   An optional pointer to an integer which
  1633.                     contains the length of the address addr.
  1634.           
  1635.           lpfnCondition  The procedure instance address of
  1636.                     the application-supplied condition
  1637.                     function which will make an
  1638.                     accept/reject decision based on the
  1639.                     caller information passed in as
  1640.                     parameters, and optionally create and/or
  1641.                     join a socket group by assigning
  1642.                     appropriate value to the result
  1643.                     parameter g of this function.
  1644.  
  1645.           This routine extracts the first connection on the
  1646.           queue of pending connections on s, and checks it
  1647.           against the condition function.  If the condition
  1648.           function returns TRUE, this routine creates a new
  1649.           socket with the same properties as s and returns a
  1650.           handle to the new socket, and then optionally
  1651.           creates and/or joins a socket group based on the
  1652.           value of the result parameter g.  Otherwise,
  1653.           reject this connection request, and proceed to the
  1654.           next one.  If no pending connections are present
  1655.           on the queue, and the socket is not marked as non-
  1656.           blocking, WSAAcceptEx() blocks the caller until a
  1657.           connection is present.  If the socket is marked
  1658.           non-blocking and no pending connections are
  1659.           present on the queue, WSAAcceptEx() returns an
  1660.           error as described below.  The accepted socket may
  1661.           not be used to accept more connections.  The
  1662.           original socket remains open.
  1663.  
  1664.           The prototype of the condition function is as
  1665.           follows:
  1666.           
  1667.        BOOL PASCAL FAR ConditionFunc( const char FAR
  1668.           * caller, int callerlen, GROUP FAR * g);
  1669.           
  1670.           ConditionFunc is a place holder for the
  1671.           application-supplied function name.  The actual
  1672.           condition function must reside in a DLL or
  1673.           application module and be exported in the module
  1674.           definition file.  You must use MakeProcInstance()
  1675.           to get a procedure-instance address for the
  1676.           callback function.  The exact format of the caller
  1677.           parameter is determined by the address family in
  1678.           which the communication is occurring.
  1679.           
  1680.           The result parameter g is assigned within the
  1681.           condition function to indicate the following
  1682.           actions:
  1683.                if g is an existing socket group id, add s to
  1684.           this group, provided all the requirements
  1685.            set by this group are met; or
  1686.  
  1687.           if g = SG_UNCONSTRAINED_GROUP, create an
  1688.                          unconstrained socket group and have
  1689.                          s as the first member; or
  1690.  
  1691.           if g = SG_CONSTRAINED_GROUP, create a constrained
  1692.                           socket group and have s as the first member; or
  1693.           
  1694.           if g = NULL, no group operation is performed.
  1695.  
  1696.           For unconstrained groups, any set of sockets may
  1697.           be grouped together as long as they are supported
  1698.           by a single Winsock Service Provider and are
  1699.           connection-oriented.  A constrained socket group
  1700.           requires that connections on all grouped sockets
  1701.           be to the same host.  For newly created socket
  1702.           groups, the new group id can be retrieved by using
  1703.           getsockopt() with option SO_GROUP_ID, if this
  1704.           connection operation completes successfully.
  1705.           
  1706.           The argument addr is a result parameter that is
  1707.           filled in with the address of the connecting
  1708.           entity, as known to the communications layer.  The
  1709.           exact format of the addr parameter is determined
  1710.           by the address family in which the communication
  1711.           is occurring.  The addrlen is a value-result
  1712.           parameter; it should initially contain the amount
  1713.           of space pointed to by addr; on return it will
  1714.           contain the actual length (in bytes) of the
  1715.           address returned.  This call is used with
  1716.           connection-oriented socket types such as
  1717.           SOCK_STREAM.  If addr and/or addrlen are equal to
  1718.           NULL, then no information about the remote address
  1719.           of the accepted socket is returned.
  1720.  
  1721.  
  1722. In addition to the new connect function, we need a few new
  1723. socket options: SO_GROUP_ID and SO_GROUP_PRIORITY.  The
  1724. group ID option is a get-only value used to discover the ID
  1725. of any group that a particular socket belongs to.  It is
  1726. also the method used to discover the ID of a newly created
  1727. group.  The group priority option is used to establish (or
  1728. discover) the relative priority of a socket within its
  1729. group.  Zero represents the highest priority.
  1730.  
  1731. Finally, we need a way to discover which sockets belong to a
  1732. particular group.  To accomplish this we propose a new
  1733. function: WSAEnumGroup():  The syntax is as follows:
  1734.  
  1735.           int PASCAL FAR WSAEnumGroup ( GROUP g, FARPROC lpfnCallback );
  1736.           
  1737.           g         Specifies the identifier of the socket
  1738.                     group for which membership information
  1739.                     is retrieved.
  1740.           
  1741.           lpfnCallback   Specifies the procedure instance
  1742.                     address of the callback function to be
  1743.                     invoked by Winsock.DLL for each member
  1744.                     socket in the group.
  1745.  
  1746. Remarks   This function is used to enumerate the members in
  1747.           the specified socket group.  It uses the standard
  1748.           Windows enumeration procedure using a "callback"
  1749.           function.  The callback function is called once
  1750.           for each member in the specified socket group.
  1751.           This will be repeated until either the callback
  1752.           function returns zero or the end of the member
  1753.           list has been reached.  On each invocation of the
  1754.           callback function, a "virtual socket" descriptor
  1755.           will be passed in as a parameter.  (For a detailed
  1756.           description of virtual sockets, please see
  1757.           WSADuplicateSocket().)  The value of the virtual
  1758.           socket parameter must either be copied to another,
  1759.           non-transient SOCKET variable and retained across
  1760.           invocations of the callback function, or the
  1761.           virtual socket must be closed prior to returning.
  1762.           Failure to do so will result in a resource leak
  1763.           through lost references to virtual sockets.
  1764.           
  1765.           The prototype of the callback function is as
  1766.           follows:
  1767.           
  1768.                int PASCAL FAR CallbackFunc( SOCKET s );
  1769.           
  1770.           CallbackFunc is a place holder for the application-
  1771.           supplied function name.  The actual callback
  1772.           function must reside in a DLL or application
  1773.           module and be exported in the module definition
  1774.           file.  You must use MakeProcInstance() to get a
  1775.           procedure-instance address for the callback
  1776.           function.  The callback function must return non
  1777.           zero to continue enumeration; to stop enumeration,
  1778.           it must return zero.
  1779.  
  1780.  
  1781. ????
  1782. ????
  1783. From cayman.cayman.com!wayne Thu Feb 17 19:24:01 1994
  1784. Message-Id: <9402180326.AA09470@cuba.Cayman.COM>
  1785. X-Sender: wayne@cuba
  1786. Mime-Version: 1.0
  1787. Content-Type: text/plain; charset="us-ascii"
  1788. Date: Thu, 17 Feb 1994 22:25:33 -0500
  1789. To: martinh@jsbus.com
  1790. From: "Wayne F. Tackabury" <wayne@Cayman.COM>
  1791. Subject: Windows Sockets v.2 Extensions
  1792. X-Mailer: <PC Eudora Version 1.4b18>
  1793. Status: OR
  1794.  
  1795. The calendar on the wall is reminding me that tomorrow is the cutoff date 
  1796. for Winsock v.2 extensions (I also lost the piece of mail which first 
  1797. informed me of this...I recall you're the man to send them to).  I have two 
  1798. in mind, but haven't had time to really develop them...perhaps if you can 
  1799. give me any validation as to their reasonableness (from your objective lofty 
  1800. vantage point :-)) or redundancy relative to already suggested, or shot 
  1801. down, proposed extensions.
  1802.  
  1803. ONE would be a hosts enumeration function.  I am trying to solve two 
  1804. problems here; one, for conventional INET family-targeted applications, is 
  1805. to simply allow a bulk transfer of the hosts information, independent of the 
  1806. underlying static or network services used to retrieve them.  The other is 
  1807. to facilitate Winsock support for protocols which depend heavily on browsing 
  1808. of hierarchical names to retrieve inherently dynamic bound addresses 
  1809. (AppleTalk comes to mind).
  1810.  
  1811. The trick (which I've not yet completely solved beyond the following) is to 
  1812. have an argument to WSAAsyncGetHostList() which would describe the hierarchy 
  1813. context for lookup.  In the case of INET, this is an array of strings 
  1814. constraining a DNS zone, NIS domain, or whathaveyou; in the case of 
  1815. AppleTalk it represents a three level array string which would constrain or 
  1816. wildcard the AppleTalk NBP name, type, and zone.  Hence
  1817.  
  1818. WSAAsyncGetHostList( HWND hWnd,  // Window handle for notification
  1819.                    unsigned int wMsg, // message for notification
  1820.                    const char far **nameContext, /* Array of string pointers
  1821.                                                    describing hierarchical
  1822.                                                    context for lookup, address
  1823.                                                    family-specific */
  1824.                    char far *buf,       // buffer for return info
  1825.                    int  buflen)         // Buffer length, in hostent structs
  1826.  
  1827.  
  1828. Return of WSAENOBUFS would return actually received number of matching 
  1829. hostents in lparam, allowing the application to adjust amount of buffering 
  1830. allocated for return.  After a bunch of time with protocol-general ways of 
  1831. envisioning FindFirst/FindNext-style "next entry index", or dealing with the 
  1832. arduous AppleTalk-style "here's my list of hosts I've already heard from, 
  1833. only give me ones not in this list" interface semantics, I have come to the 
  1834. conclusion that the best, albeit less performance-friendly, way of dealing 
  1835. with this is to let the application worry about it.
  1836.  
  1837. I'd be very very suprised if this proposal hasn't been raised somewhere
  1838. before.
  1839.  
  1840. TWO, I've only started thinking about in the last day or two...it would 
  1841. involve allowing a calling application to set the network protocol address 
  1842. of an interface. One could either have a straight sethostaddr() function, or 
  1843. tie it into a more general non-socket ioctl() function; to solve what I'm 
  1844. trying to solve, you don't need the latter necessarily (to set subnet 
  1845. address, max datagram size, etc. system wide; but then again, I'm not trying 
  1846. to write a generalized DHCP client).
  1847.  
  1848. If you've used PPP, you can see the problem I'm getting at here; unless the 
  1849. PPP client is part of a monolithic TCP kernel, there is no way to allow 
  1850. server-assigned interface adddresses directly...so near as I can tell, 
  1851. people are forcing the issue by using bootp and rarp where they aren't 
  1852. really called for.  This would provide common semantics for configuration of 
  1853. interfaces for service without providing their known addresses.
  1854.  
  1855. Anyways, I've waxed on long enough with content of dubious originality and 
  1856. value...if you think there's value in pursuing this, let me know how you are 
  1857. planning to bring these kinds of proposals to the list, and I'll hack more 
  1858. complete prototypes together.
  1859.  
  1860. Thanks,
  1861.  
  1862. Wayne
  1863.  
  1864. ----------------------------------
  1865.  
  1866. There is such a fine line between genius and stupidity. 
  1867.                                -- Nigel Tufnel, *Spinal Tap*
  1868.  
  1869. Wayne F. Tackabury                       Cayman Systems, Inc.          
  1870. 400 Unicorn Park Dr., Woburn MA  01801   Internet: wayne@cayman.com
  1871. Voice: (617) 932-1100                    Fax: (617) 932-0853
  1872. CompuServe: 73207,3650                   AppleLink: D0523
  1873.  
  1874. ????
  1875. ????
  1876. From relay1.uu.net!netmanage.com!tmima Fri Feb 18 11:51:11 1994
  1877. Message-Id: <Chameleon.940218125848.tmima@tmima2.netmanage.com>
  1878. Date: Fri, 18 Feb 94 12:54:20 PST
  1879. Reply-To: Tmima Koren <tmima@netmanage.com>
  1880. From: Tmima Koren <tmima@netmanage.com>
  1881. To: martinh@jsbus.com
  1882. Subject: Windows Sockets 2 Contribution
  1883. Status: OR
  1884.  
  1885.  
  1886. sethostent()
  1887. gethostent()
  1888. endhostent()
  1889.  
  1890. setprotoent()
  1891. getprotoent()
  1892. endprotoent()
  1893.  
  1894. setservent()
  1895. getservent()
  1896. endservent()
  1897.  
  1898. ????
  1899. ????
  1900. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  1901. 13:31:23 1994
  1902. Date: Fri, 18 Feb 94 13:38:01 PST
  1903. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  1904. Message-ID: <940218133801_1@ccm.hf.intel.com>
  1905. To: martinh@jsbus.com
  1906. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  1907. Subject: Input for Winsock Ver 2
  1908. Status: OR
  1909.  
  1910.  
  1911. Text item: Text_1
  1912.  
  1913.                                                     02/18/94
  1914. Dear Martin,
  1915.  
  1916. Intel is pleased to supply the following input to the Winsock 2
  1917. definition process. There are 10 proposals in all, with this submittal
  1918. corresponding to proposal number 8. 
  1919.  
  1920. -------> IMPORTANT NOTE: <-------------------
  1921. Because of limitiations in the somewhat brain-dead
  1922. mailer I am using, this submittal is being broken up into two pieces.
  1923. Please merge them back together when both pieces arrive.  This is part
  1924. 1 of 2 pieces which comprise submittal #8.
  1925.  
  1926.  
  1927. Regards,
  1928.  
  1929. David B. Andersen
  1930. Intel Architecture Labs
  1931.  
  1932.  
  1933. Extension #8:
  1934.      Quality of service specification
  1935.  
  1936. Description:
  1937. As alluded to in our proposed extension # 7, applications
  1938. need a way to specify required quality of service levels
  1939. (QOS) for sockets and socket groups.  We feel strongly that
  1940. a mechanism for specifying QOS in Winsock QOS should be
  1941. compatible with corresponding work being done under the
  1942. auspices of the IETF.  RFC 1363 proposes a QOS specification
  1943. mechanism referred to as a flow spec. We have based our
  1944. proposal for how QOS should be specified at the API level on
  1945. the flow spec concept.
  1946.  
  1947. A brief overview of this concept is as follows:  Flow specs
  1948. describe a set of characteristics about a proposed
  1949. connection-oriented, unidirectional flow through the
  1950. network.  An application may associate a flow spec with a
  1951. socket at the time a connection request is made.  This flow
  1952. spec indicates parametrically what level of service is
  1953. required and also stipulates how flexible the application is
  1954. willing to be if the requested level of service is not
  1955. available.  (This ranges from "don't make a connection if I
  1956. don't get all that I asked for", to "here is what I would
  1957. like but I'll take anything I can get".)  After a connection
  1958. is established, the application may retrieve the flow spec
  1959. associated with the socket and examine its contents to
  1960. discover the level of service that the network is willing
  1961. and/or able to provide.  If the service provided is not
  1962. acceptable, the application may close the socket and take
  1963. whatever action is appropriate (e.g. scale back and ask for
  1964. a lower quality of service, try again later, notify the user
  1965. and exit, etc.)
  1966.  
  1967. Even after a flow is established, conditions in the network
  1968. may change resulting in a reduction (or increase) in the
  1969. available service level.  A notification mechanism is
  1970. included which utilizes the existing (and proposed) Winsock
  1971. notification techniques to indicate to the application that
  1972. QOS levels have changed.  The app should again retrieve the
  1973. corresponding flow spec and examine it in order to discover
  1974. what aspect of the service level has changed.
  1975.  
  1976. Semantics:
  1977. The basic QOS mechanism proposed for Winsock revolves around
  1978. the flow specification (or "flow spec") as described by
  1979. Craig Partridge in RFC 1361, dated September 1992.  Flow
  1980. specs provide a parametric representation of key QOS
  1981. characteristics.  Winsock's notion of a flow spec is a
  1982. backwards compatible extension of that defined in RFC 1363.
  1983. Applications use flow specs to indicate their service
  1984. requirements, and networks use flow specs to indicate QOS
  1985. availability.  Flow specs divide QOS characteristics into
  1986. the following general areas:
  1987.  
  1988. 1.Network bandwidth utilization - The manner in which the
  1989.   application's traffic will be injected into the network.
  1990.   This includes specifications for average bandwidth
  1991.   utilization, maximum burst duration and peak burst rate.
  1992.   It also includes an indication which the network may
  1993.   provide of minimum link bandwidth (i.e. how wide the
  1994.   skinniest pipe is between the two hosts).
  1995.  
  1996. 2.Sensitivity to delay - Applications indicate a delay or
  1997.   latency value as a target for the network, with an
  1998.   understanding that further reductions in delay below this
  1999.   value are of marginal use to the application.  A means is
  2000.   also provided to stipulate the maximum amount of delay
  2001.   variation that can be tolerated.
  2002.  
  2003. 3.Willingness to cope with data loss and service
  2004.   interruption - Loss properties are expressed in terms of
  2005.   both overall percentage of lost packets and maximum
  2006.   amounts of bursty loss.  Service interruption indicates
  2007.   how long the application is willing to tolerate loss of
  2008.   all communication with the endpoint before considering
  2009.   the connection broken.
  2010.  
  2011. 4.Level of service guarantee -  Applications are able to
  2012.   indicate a range of requirements, from the need for an
  2013.   ironclad guarantee to a willingness to accept whatever is
  2014.   available after merely expressing a hint about QOS
  2015.   preferences.
  2016.  
  2017. 5.Flow content identification - Applications may select
  2018.   from a wide selection of well-known constants to identify
  2019.   the media content of a flow.
  2020.  
  2021. 6.Cost sensitivity - An indication of how willing the
  2022.   application is to minimize communications cost to the
  2023.   possible detriment of other QOS parameters.
  2024.  
  2025. 7.Communications security - Applications may specify a
  2026.   particular encryption system or option and identify
  2027.   public keys to be used
  2028.  
  2029. Flow specs are only applicable to DSTREAM style sockets
  2030. which are  unidirectional (either inbound or outbound).  An
  2031. application indicates its desire for a non-default flow spec
  2032. at the time a connection request is made.  Since
  2033. establishing a flow spec'd connection is likely to involve
  2034. cooperation and/or negotiation between intermediate routers
  2035. and hosts, the results of a flow spec request cannot be
  2036. determined until after the connection operation is fully
  2037. completed.  After this time, the application may use
  2038. getsockopt() to retrieve the resulting flow spec structure
  2039. so that it can determine what the network was willing and/or
  2040. able to supply.
  2041.  
  2042. Also, it is entirely possible that QOS conditions may change
  2043. during the life of a connection.  A means is provided,
  2044. therefore, for a service provider to notify the application
  2045. that it should access and inspect the current flow spec
  2046. which will have one or more modified values.
  2047.  
  2048. The Flow Spec Structure
  2049.  
  2050. The proposed flow spec structure is defined as follows.
  2051. Portions of the comment fields shown in italics indicate the
  2052. corresponding flow spec field identifier as found in RFC
  2053. 1363.
  2054.  
  2055.           typedef struct FlowSpec {
  2056.           int   iMaxMsgSize;            // MTU: Max message size: bytes
  2057.           float fAvgBw;                 // Token Bucket Rate: bytes/sec
  2058.           float fBurstLength;           // Token Bucket Size: bytes
  2059.           float fBurstRate;         // Max Trans Rate: bytes/sec
  2060.           float fMinLinkSpeed           // Size of thinnest pipe: bytes/sec
  2061.                   int   iConnectionStatus       // Status of the connection
  2062.           int   iMinDelaySel;           // Minimum Delay Noticed:
  2063.           float fMinDelayValue;     // Delay value: usec
  2064.           float fMaxDelayVariation; // Max Delay Variation: usec
  2065.           int   iLossSensitivity;   // Loss Sensitivity:
  2066.           float fMaxLostPkts;           // Max # lost MTU's over...
  2067.           float fLossInterval;      // Loss Interval in MTU's
  2068.           float fMaxBurstLoss;      // Burst Loss Sensitivity
  2069.                                         // max # consec. lost MTU's
  2070.           int   iMaxSvcOutage;      // Max dur for svc outage: sec
  2071.           int   iQualOfGuarantee;   // Quality of Guarantee
  2072.           int   iFlowContent;           // flow content identifier
  2073.           int   iCostSensitivity;   // Cost sensitivity
  2074.           int   iEncryptionSel;     // Selected encryption algo
  2075.           char far *lpEncryptionKey; // Pointer to desired key
  2076.           } FLOWSPEC;
  2077.           
  2078.           
  2079. The sections which follow provide a detailed description of
  2080. each field in the flow spec.
  2081.  
  2082. iMaxMsgSize
  2083.  
  2084. This field corresponds to the Maximum Transmission Unit
  2085. field in RFC 1363.  It describes the maximum sized message
  2086. (in bytes) that the application intends to send over the
  2087. flow.  This must, of course, be no larger than the value of
  2088. SO_MAX_DG_SIZE for the underlying service provider.  The
  2089. intent of expressing this value in the flow spec is not to
  2090. provide a hard limit for the application.  Rather, it serves
  2091. two different purposes.
  2092.  
  2093. First, it is a convenient unit for expressing loss
  2094. properties.  Using the default MTU of the internetwork is
  2095. inappropriate since the internetwork may have a very large
  2096. MTU, such as the 64 Kbytes of IP, but applications and hosts
  2097. may be sensitive to losses of far less than an MTU's amount
  2098. of data. For example, a voice application would be sensitive
  2099. to a loss of several consecutive small packets.
  2100.  
  2101. Secondly, the MTU also bounds the amount of time that a flow
  2102. can transmit, uninterrupted, on a shared media.  Similarly,
  2103. the loss rates of links that suffer bit errors will vary
  2104. dramatically based on the MTU size.
  2105.  
  2106. fAvgBw
  2107.  
  2108. This field corresponds to the Token Bucket Rate field in RFC
  2109. 1363.  It is one of three fields used to define how traffic
  2110. will be injected into the internetwork by the sending
  2111. application.
  2112.  
  2113. As flow specs are based upon the well-known leaky bucket
  2114. algorithm for flow control, this field and several others
  2115. are described in terms of imaginary tokens and buckets.  The
  2116. token rate is the rate at which tokens (credits) are placed
  2117. into an imaginary token bucket, expressed in bytes/second.
  2118. For each flow, a separate bucket is maintained.  To send a
  2119. packet over the flow, a host must remove a number of credits
  2120. equal to the size of the packet from the token bucket.  If
  2121. there are not enough credits, the host must wait until
  2122. enough credits accumulate in the bucket.
  2123.  
  2124. Note that the fact that the rate is expressed in terms of a
  2125. token bucket rate does not mean that hosts must implement
  2126. token buckets. Any traffic management scheme that yields
  2127. equivalent behavior is permitted.
  2128.  
  2129. The field indicates the number of byte credits (i.e., right
  2130. to send a byte) per second which are deposited into the
  2131. token bucket.  The value zero is slightly special.  It is used to 
  2132. indicate that the application is not making a request for bandwidth
  2133. guarantees. If this field is zero, then the fBurstLength
  2134. field must also be zero, and the type of guarantee requested
  2135. may be no higher than predicted service (explained below).
  2136.  
  2137. fBurstLength
  2138.  
  2139. This field corresponds to the Token Bucket Size field in RFC
  2140. 1363.  It controls the maximum amount of data that the flow
  2141. can send at the peak rate, and is expressed in terms of
  2142. bytes.  More formally, if the burst length is B, and the
  2143. average rate is R, over any arbitrarily chosen interval T in
  2144. the life of the flow, the amount of data that the flow sends
  2145. cannot have exceeded B + (R * T) bytes.
  2146.  
  2147. The imaginary token bucket is filled at the token bucket
  2148. rate.  The bucket size (or burst length) limits how many
  2149. credits the flow may store.  When the bucket is full, new
  2150. credits are discarded.
  2151.  
  2152. The field is ignored if the fAvgBw field is zero.  Note that
  2153. fBurstLength must be greater than or equal to iMaxMsgSize.
  2154. Zero is a legal value for the field and indicates that no
  2155. credits are saved.
  2156.  
  2157. fBurstRate
  2158.  
  2159. This field corresponds to the Maximum Transmission Rate
  2160. field in RFC 1363, and is expressed in bytes/second.  This
  2161. rate limits how fast packets may be sent back to back from
  2162. the host.  Consider that if the token bucket is full, it is
  2163. possible for the flow to send a series of back-to-back
  2164. packets, with the length of this run equal to the size of
  2165. the token bucket (fBurstLength).  If the token bucket size
  2166. is large, this back-to-back run may be long enough to
  2167. significantly inhibit multiplexing.  To limit this effect,
  2168. fBurstRate bounds how fast successive packets may be placed
  2169. on the network.
  2170.  
  2171. One can think of fBurstRate  as being a form of a leaky
  2172. bucket.  When a packet is sent, a number of credits equal to
  2173. the size of the packet is placed into an empty bucket, which
  2174. drains credits at the burst rate.  No more packets may be
  2175. sent until the bucket has emptied again.
  2176.  
  2177. fMinLinkSpeed
  2178.  
  2179. This field is an extension to the RFC 1363 flow spec, and is
  2180. expressed in bytes/second.  It is provided as a way for the
  2181. network to supply useful information to the application.
  2182.  
  2183. After a connection has been established, an application may
  2184. examine this field in order to determine the capacity
  2185. limitations of the underlying hops which the connection
  2186. spans.  All such hops will have a capacity greater than or
  2187. equal to fMinLinkSpeed.  
  2188.  
  2189. A typical way for an application to use this field would be to
  2190. initiate a connection requesting the lowest possible level of service.
  2191. Once the connection is established, the app may then determine that higher
  2192. levels of service are likely possible.  It may then elect to either
  2193. modify its use of the socket or perhaps trade its current socket in on
  2194. one with a higher level of service.
  2195.  
  2196. A value of zero implies that this information is not
  2197. available from the network. This field is undefined for
  2198. unconnected sockets.
  2199.  
  2200. iConnectionStatus
  2201.  
  2202. This field is an extension to the RFC 1363 flow spec.  It is provided
  2203. as a way for the network to indicate a change in the connection status
  2204. to the application using one of the following manifest constants as 
  2205. values: OPERATIONAL,  INTERRUPTED, or SUSPENDED.  Typical scenarios
  2206. might include: connection status on our cellular modem link changes 
  2207. to INTERRUPTED because our car just drove into a tunnel, and then 
  2208. changes back to OPERATIONAL when we come out the other side.  Later 
  2209. on, connection status changes to SUSPENDED because we are going into 
  2210. power conservation mode.  The availability of connection status may be 
  2211. especially useful for situations where the iMaxSvcOutage value 
  2212. is fairly long.
  2213.  
  2214. A value of UNKNOWN implies that this information is not available 
  2215. from the network. This field is undefined for unconnected sockets.
  2216.  
  2217. ----------  End of Part 1  ------ Continued in Part 2  ---------
  2218.  
  2219.  
  2220. ????
  2221. ????
  2222. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2223. 13:32:28 1994
  2224. Date: Fri, 18 Feb 94 13:39:08 PST
  2225. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2226. Message-ID: <940218133908_3@ccm.hf.intel.com>
  2227. To: martinh@jsbus.com
  2228. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2229. Subject: Input for Winsock Ver 2
  2230. Status: OR
  2231.  
  2232.  
  2233. Text item: Text_1
  2234.  
  2235.                                                     02/18/94
  2236. Dear Martin,
  2237.  
  2238. This is part 2 of 2 pieces which comprise our submittal #8.
  2239.  
  2240. Because of limitiations in the somewhat brain-dead
  2241. mailer I am using, this submittal is being broken up into two pieces.
  2242. Please merge them back together when both pieces arrive.  
  2243.  
  2244.  
  2245. Regards,
  2246.  
  2247. David B. Andersen
  2248. Intel Architecture Labs
  2249.  
  2250. ------------ Begin Part 2 of Submittal #8  -----------------------
  2251.  
  2252. iMinDelaySel and fMinDelayValue
  2253.  
  2254. These two fields both map to the Minimum Delay Noticed field
  2255. in RFC 1363.  Winsock uses two fields because in the RFC the
  2256. corresponding value may either be one of a set of manifest
  2257. constants or a floating point number.  The iMinDelaySel
  2258. field is used to represent the manifest constant, and, if
  2259. applicable, the fMinDelayValue field is used to store the
  2260. floating point value in microseconds.
  2261.  
  2262. The minimum delay noticed field tells the internetwork that
  2263. the host and application are effectively insensitive to
  2264. improvements in end-to-end delay below this value.  The
  2265. network is encouraged to drive the delay down to this value
  2266. but need not try to improve the delay further.
  2267.  
  2268. If expressed as a number it is the number of microseconds of
  2269. delay below which the host and application do not care about
  2270. improvements.  Human users only care about delays in the
  2271. millisecond range but some applications will be computer to
  2272. computer and computers now have clock times measured in a
  2273. handful of nanoseconds.  For such computers, microseconds
  2274. are an appreciable time.  For this reason, this field
  2275. measures in microseconds, even though that may seem small.
  2276.  
  2277. Manifest constants for iMinDelaySel are as follows:
  2278.  
  2279.   NO_DELAY_SENSITIVITY  -- the application is not sensitive
  2280.   to delay
  2281.  
  2282.   MODERATE_DELAY_SENSITIVITY -- the application is
  2283.   moderately delay sensitive (e.g., avoid satellite links
  2284.   where possible)
  2285.  
  2286.   NUMERIC_DELAY_SENSITIVITY -- the application is sensitive
  2287.   to delay as expressed in fMinDelayValue
  2288.  
  2289. fMaxDelayVariation
  2290.  
  2291. This field corresponds to the Maximum Delay Variation field
  2292. in RFC 1361. It is the difference, in microseconds, between
  2293. the maximum and minimum possible delay that a packet will
  2294. experience.  If a receiving application requires data to be
  2295. delivered in the same pattern that the data was transmitted,
  2296. it may be necessary for the receiving host to briefly buffer
  2297. data as it is received so that the receiver can restore the
  2298. old transmission pattern.  (An easy example of this is a
  2299. case where an application wishes to send and transmit data
  2300. such as voice samples, which are generated and played at
  2301. regular intervals.  The regular intervals may be distorted
  2302. by queuing effects in the network and the receiver may have
  2303. to restore the regular spacing.)
  2304.  
  2305. The amount of buffer space that the receiving host is
  2306. willing to provide determines the amount of variation in
  2307. delay permitted for individual packets within a given flow.
  2308. The maximum delay variation field makes it possible to tell
  2309. the network how much variation is permitted.
  2310.  
  2311. The value of 0, meaning the receiving host will not buffer
  2312. out delays, is acceptable but the receiving host must still
  2313. have enough buffer space to receive a maximum transmission
  2314. unit sized packet from the sending host.  Note that it is
  2315. expected that a value of 0 will make it unlikely that a flow
  2316. can be established.
  2317.  
  2318. iLossSensitivity, fMaxLostPkts and fLossInterval
  2319.  
  2320. These fields together correspond to the Loss Sensitivity and
  2321. Loss Interval fields in the RFC. iLossSensitivity takes on
  2322. one of the following well-known values:
  2323.  
  2324.   NO_LOSS_SENSITIVITY -- The application is not sensitive
  2325.   to loss, relying on higher level protocols if needed.
  2326.  
  2327.   SOME_LOSS_SENSITIVITY -- The application is sensitive to
  2328.   loss but is not specifying a numeric requirement.  Where
  2329.   possible, the network should choose a path with minimal
  2330.   loss.
  2331.  
  2332.   NUMERIC_LOSS_SENSITIVITY -- The application requires that
  2333.   loss characteristics be as described in fMaxLostPkts and
  2334.   fLossInterval.
  2335.  
  2336. fMaxLostPkts specifies the maximum number of MTU sized
  2337. packets that may be lost over an interval during which
  2338. fLossInterval MTU sized packets were sent.  Thus, taken
  2339. together, these values specify an average loss percentage.
  2340.  
  2341. fMaxBurstLoss
  2342.  
  2343. This field corresponds to the Burst Loss Sensitivity field
  2344. in the RFC. It states how sensitive the application's flow
  2345. is to losses of consecutive packets.  The field enumerates
  2346. the maximum number of consecutive MTU-sized packets that may
  2347. be lost.  A value of zero indicates that the flow is
  2348. insensitive to burst loss.
  2349.  
  2350. Note that it is permissible to set the iLossSensitivity
  2351. field to simply indicate some sensitivity to loss, and set a
  2352. numerical limit on the number of consecutive packets that
  2353. can be lost.
  2354.  
  2355. iMaxSvcOutage
  2356.  
  2357. This field represents an extension to the RFC flow spec.  It
  2358. indicates to the network a time interval, expressed in
  2359. seconds (not microseconds), during which communications over
  2360. the connection may be interrupted without considering the
  2361. connection to be permanently broken.  A value of zero
  2362. indicates no preference on behalf of the application, and
  2363. that the underlying service provider's default value should
  2364. be used.
  2365.  
  2366. iQualOfGuarantee
  2367.  
  2368. This field corresponds to the Quality of Guarantee field in
  2369. the RFC.  It is expected that the internetwork will likely
  2370. have to offer more than one type of guarantee.  There are
  2371. two unrelated issues related to guarantees.
  2372.  
  2373. First, it may not be possible for the internetwork to make a
  2374. firm guarantee.  Consider a path through an internetwork in
  2375. which the last hop is an Ethernet.  Experience has shown
  2376. (e.g., some of the IETF conferencing experiments) that an
  2377. Ethernet can often give acceptable performance, but clearly
  2378. the internetwork cannot guarantee that the Ethernet will not
  2379. saturate at some time during a flow's lifetime.  Thus it
  2380. must be possible to distinguish between flows which cannot
  2381. tolerate the small possibility of a failure (and thus must
  2382. guaranteed at every hop in the path) and those that can
  2383. tolerate islands of uncertainty.
  2384.  
  2385. Second, it is presumed that some applications will be able
  2386. to adapt to modest variations in internetwork performance
  2387. and that network designers can exploit this flexibility to
  2388. allow better network utilization.  In this model, the
  2389. internetwork would be allowed to deviate slightly from the
  2390. promised flow parameters during periods of load.  This class
  2391. of service is called predicted service (to distinguish it
  2392. from guaranteed service).
  2393.  
  2394. The difference between predicted service and service which
  2395. cannot be perfectly guaranteed (e.g., the Ethernet example
  2396. mentioned above) is that the imperfect guarantee makes no
  2397. statistical promises about how it might misbehave.  In the
  2398. worst case, the imperfect guarantee will not work at all,
  2399. whereas predicted service will give slightly degraded
  2400. service.  Note too that predicted service assumes that the
  2401. routers and links in a path all cooperate (to some degree)
  2402. whereas an imperfect guarantee states that some routers or
  2403. links will not cooperate.
  2404.  
  2405. There are six legal values:
  2406.  
  2407.   NO_GUARANTEE - no guarantee is required (the host is
  2408.   simply expressing desired performance for the flow).
  2409.  
  2410.   IMPERFECT_GUARANTEE_REQUESTED - an imperfect guarantee is
  2411.   requested.
  2412.  
  2413.   PREDICTED_SVC_REQUIRED - predicted service is requested
  2414.   and if unavailable, then no flow should be established.
  2415.  
  2416.   PREDICTED_SVC_REQUESTED - predicted service is requested
  2417.   but an imperfect guarantee is acceptable.
  2418.  
  2419.   GUARANTEED_SVC_REQUIRED - guaranteed service is requested
  2420.   and if a firm guarantee cannot be given, then no flow
  2421.   should be established.
  2422.  
  2423.   GUARANTEED_SVC_REQUESTED - guaranteed service is
  2424.   requested and but an imperfect guarantee is acceptable.
  2425.  
  2426. Application developers should realize that asking for
  2427. predicted service or permitting an imperfect guarantee will
  2428. substantially increase the chance that a flow request will
  2429. be accepted.
  2430.  
  2431. iFlowContent
  2432.  
  2433. This field represents an extension over the flow spec
  2434. defined in the RFC.  The allowed values are all manifest
  2435. constants which indicate the type of media being transported
  2436. over the flow.  Use of this field is optional.  Its purpose is
  2437. to provide a simplified alternative to specifying QOS 
  2438. parametrically.  For service providers that are "tuned" to 
  2439. transport certain types of media, merely identifying the socket
  2440. as bearing a reconginzed media type may be sufficient to
  2441. identify needed QOS levels.
  2442.  
  2443. Currently defined values include
  2444.   UNSPECIFIED
  2445.   GSM_AUDIO
  2446.   ADPCM_AUDIO
  2447.   (TBD other types of audio streams)
  2448.   INDEO_PRV
  2449.   INDEO_ISV
  2450.   INDEO_MRV
  2451.   H261
  2452.   MPEG1
  2453.   MPEG2
  2454.   (TBD other types of video stream)
  2455.   SVC_PROVIDER_SPECIFIC - service providers are free to
  2456.   define their own constants for media streams with values
  2457.   greater than or equal to this.
  2458.  
  2459. iCostSensitivity
  2460.  
  2461. This field represents an extension over the flow spec
  2462. defined in the RFC.  The allowed values are manifest
  2463. constants which indicate whether or not the application
  2464. wishes to minimize any costs associated with a connection to
  2465. the possible detriment of other QOS parameters.  Allowed
  2466. values are:
  2467.  
  2468.   NOT_COST_SENSITIVE - the application considers cost to be
  2469.   a secondary concern or no concern at all.
  2470.  
  2471.   COST_SENSITIVE - the application considers cost to be a
  2472.   primary concern and wishes to minimize it where possible.
  2473.  
  2474. iEncryptionSel and lpEncryptionKey
  2475.  
  2476. These fields represents an extension over the flow spec
  2477. defined in the RFC.  They are used to indicate the
  2478. application's choice for encryption algorithms (if any) and
  2479. also to specify a pointer to where an encryption key may be
  2480. found.  Interpretation of the memory contents pointed to by
  2481. the encryption key pointer is service provider/encryption
  2482. algorithm specific.  Values for the iEncryptionSel field are
  2483. also service provider specific, with the convention that
  2484. zero is used to indicate that no encryption is being
  2485. requested.
  2486.  
  2487. Default Flow Spec
  2488.  
  2489. A default flow spec is associated with each eligible socket
  2490. at the time it is created.  Field values for this default
  2491. flow spec are indicated below.  In all cases these values
  2492. indicate that no particular flow characteristics are being
  2493. requested from the network.  Applications only need to
  2494. modify values for those fields that they are interested in,
  2495. but must be aware that there exists some coupling between
  2496. fields as was described above.
  2497.  
  2498. iMaxMsgSize =       SO_MAX_DG_SIZE for the particular service provider
  2499. fAvgBw =                0, no bandwidth request
  2500. fBurstLength =      0, not applicable because fAvgBw is zero
  2501. fBurstRate =        0, not applicable because fAvgBw is zero
  2502. fMinLinkSpeed =     supplied by network, undefined until connection occurs
  2503. iConnectionStatus=  supplied by network, undefined until connection occurs
  2504. iMinDelaySel =      NO_DELAY_SENSITIVITY
  2505. fMinDelayValue =    0, not applicable
  2506. fMaxDelayVariation =0, not applicable
  2507. iLossSensitivity =  NO_LOSS_SENSITIVITY
  2508. fMaxLostPkts =      0, not applicable
  2509. fLossInterval =     0, not applicable
  2510. iMaxSvcOutage =     0, use provider defaults for time-out
  2511. iQualOfGuarantee =  NO_GUARANTEE
  2512. iFlowContent =      UNSPECIFIED
  2513. iCostSensitivity =  NOT_COST_SENSITIVE
  2514. iEncryptionSel =    0, no encryption requested
  2515. lpEncryptionKey =   NULL
  2516.  
  2517.  
  2518. The semantics for associating a flow spec with a socket or
  2519. socket group appeared as part of our proposed extension #7
  2520. on socket groups.  The WSAConnectEx() function which was
  2521. described therein is used.  For the sake of completeness, we
  2522. repeat that function description here.
  2523.  
  2524. int PASCAL FAR WSAConnectEx ( SOCKET s, const struct sockaddr FAR * name,
  2525.           int namelen, GROUP g, char  FAR * lpSFlowspec, int iSFlowspecLen,
  2526.           char FAR * lpGFlowspec, int iGFlowspecLen );
  2527.           
  2528.           s          A descriptor identifying an unconnected
  2529.                     socket.
  2530.           
  2531.           name      The name of the peer to which the socket
  2532.                     is to be connected.
  2533.           
  2534.           namelen   The length of the name.
  2535.           
  2536.           g         The identifier of the socket group.
  2537.           
  2538.           lpSFlowspec    A pointer to the flow spec for
  2539.                     socket s.
  2540.           
  2541.           iSFlowspecLen  The length of the flow spec for
  2542.                     socket s.  It must be larger than or
  2543.                     equal to the size of struct FLOWSPEC.
  2544.           
  2545.           lpGFlowspec    A pointer to the flow spec for the
  2546.                     socket group to be created, if the value
  2547.                     of parameter g is SG_CONSTRAINED_GROUP.
  2548.           
  2549.           iGFlowspecLen  The length of the flow spec for the
  2550.                     socket group to be created, if the value
  2551.                     of parameter g is SG_CONSTRAINED_GROUP.
  2552.                     It must be larger than or equal to the
  2553.                     size of struct FLOWSPEC.
  2554.  
  2555.           This function is used to create a connection to
  2556.           the specified destination.  For connection-
  2557.           oriented sockets (e.g., type SOCK_STREAM), an
  2558.           active connection is initiated to the foreign host
  2559.           using name (an address in the name space of the
  2560.           socket;).  When the socket call completes
  2561.           successfully, the socket is ready to send/receive
  2562.           data.
  2563.           
  2564.           For a connectionless socket (e.g., type
  2565.           SOCK_UNREL_DGRAM), the operation performed by
  2566.           WSAConnectEx() is merely to establish a default
  2567.           destination address which will be used on
  2568.           subsequent send() and recv() calls.
  2569.           
  2570.           If the socket, s, is unbound, unique values are
  2571.           assigned to the local association by the system,
  2572.           and the socket is marked as bound.  Note that if
  2573.           the address field of the name structure is all
  2574.           zeroes, WSAConnectEx() will return the error
  2575.           WSAEADDRNOTAVAIL.
  2576.           
  2577.           Parameter g is used to indicate the appropriate
  2578.           actions on socket groups:
  2579.            if g is an existing socket group id, add s to
  2580.                          this group, provided all the requirements
  2581.                          set by this group are met; or
  2582.  
  2583.            if g = SG_UNCONSTRAINED_GROUP, create an
  2584.                           unconstrained socket group and have
  2585.                           s as the first member; or
  2586.  
  2587.            if g = SG_CONSTRAINED_GROUP, create a
  2588.                           constrained socket group and have s as
  2589.                           the first member; or
  2590.  
  2591.            if g = NULL, no group operation is performed.
  2592.  
  2593.           For an unconstrained group, any set of sockets may
  2594.           be grouped together as long as they are supported
  2595.           by a single Service Provider and are connection-
  2596.           oriented.  A constrained socket group requires
  2597.           that connections on all grouped sockets be to the
  2598.           same host.  For newly created socket groups, the
  2599.           new group id can be retrieved by using
  2600.           getsockopt() with option SO_GROUP_ID, if this
  2601.           connect operation completes successfully.
  2602.           
  2603.           lpSFlowspec, and iSFlowspecLen specify a block of
  2604.           memory containing the flow spec for socket s, if s
  2605.           is unidirectional and a DSTREAM type socket.
  2606.           Otherwise, these values are ignored.  The first
  2607.           part of this memory block is struct FLOWSPEC,
  2608.           followed by any Service Provider specific data.
  2609.           Thus, iSFlowspecLen must be larger than or equal
  2610.           to the size of struct FLOWSPEC.  A NULL value for
  2611.           lpSFlowspec indicates no application supplied flow
  2612.           spec.
  2613.           
  2614.           lpGFlowspec, and iGFlowspecLen specify a block of
  2615.           memory containing the flow spec for the socket
  2616.           group to be created, if (and only if) the value of
  2617.           parameter g is SG_CONSTRAINED_GROUP.  Otherwise,
  2618.           these values are ignored.  The first part of this
  2619.           memory block is struct FLOWSPEC, followed by any
  2620.           Service Provider specific data.  Thus,
  2621.           iGFlowspecLen must be larger than or equal to the
  2622.           size of struct FLOWSPEC.  A NULL value for
  2623.           lpGFlowspec indicates no application supplied flow
  2624.           spec.
  2625.  
  2626. The QOS notification mechanism utilizes the existing
  2627. WSAAsyncSelect() and proposed WSACallbackSelect() functions
  2628. by defining an additional event: FD_QOS.  If an application
  2629. expresses an interest in being notified about QOS events,
  2630. the service provider will utilize the available mechanisms
  2631. to notify the app whenever something in the flow spec has
  2632. changed.
  2633.  
  2634. An application may access the flow spec associated with a
  2635. socket or with the socket's group (if any) by retrieving the
  2636. value of one of the following proposed get-only socket
  2637. options: SO_FLOWSPEC or SO_GROUP_FLOWSPEC.  A returned value
  2638. of NULL indicates that there is no associated flow spec.
  2639.  
  2640. ------------- End of Submittal #8  -----------------------------
  2641.  
  2642. ????
  2643. ????
  2644. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2645. 13:32:51 1994
  2646. Date: Fri, 18 Feb 94 13:39:17 PST
  2647. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2648. Message-ID: <940218133917_5@ccm.hf.intel.com>
  2649. To: martinh@jsbus.com
  2650. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2651. Subject: Input for Winsock Ver 2
  2652. Status: OR
  2653.  
  2654.  
  2655. Text item: Text_1
  2656.  
  2657.                                                     02/18/94
  2658. Dear Martin,
  2659.  
  2660. Intel is pleased to supply the following input to the Winsock 2
  2661. definition process. There are 10 proposals in all, with this submittal
  2662. corresponding to proposal number 9.
  2663.  
  2664. For each of our proposals we supply a desciption of the proposed
  2665. extension, our motivations for making the extension proposal, and the
  2666. detailed syntax for how the extension might be implemented.
  2667.  
  2668. We would also like to volunteer our services to assist in the process
  2669. of collating and summarizing the various submitals that are coming in
  2670. from Forum members.  Please let us know how we can best assist you in
  2671. this process.
  2672.  
  2673. Regards,
  2674.  
  2675. David B. Andersen
  2676. Intel Architecture Labs
  2677.  
  2678.  
  2679. Extension #9:
  2680.      Conditional acceptance of socket connection requests
  2681.  
  2682. Description:
  2683. The current Winsock specification does not provide a way for
  2684. an application with a listening socket to conditionally
  2685. accept an incoming connection request based upon the
  2686. requester's address.  (In other words, Winsock has no
  2687. equivalence to caller ID.)  This is curious since the
  2688. current Winsock spec includes an error code for the
  2689. connect() function which indicates that the connection
  2690. attempt was rejected, but does not provide a mechanism that
  2691. allows a listening application to cause this rejection to
  2692. occur.  Currently, the only viable option is for the
  2693. listening app to accept the connection, use getpeername() to
  2694. establish the caller's ID and then immediately close the
  2695. socket.  The caller may well begin sending as soon as the
  2696. connection is accepted, and will probably not understand why
  2697. the connection was suddenly closed.
  2698.  
  2699. We propose to remedy this by making it possible for an
  2700. application to discover who is wanting to connect prior to
  2701. accepting the request, and by allowing the app to reject the
  2702. request if it decides to.
  2703.  
  2704. Motivation:
  2705. Most other transport level interfaces have such a feature.
  2706. It's usefulness is, I think, obvious.
  2707.  
  2708. Semantics:
  2709. In our proposed extension #7 on socket groups we introduced
  2710. the proposed WSAAcceptEx() function as a means to performing
  2711. grouping of sockets.  This same function is also used for
  2712. conditional acceptance.  The basic approach is to allow the
  2713. app to specify a conditional acceptance function that is
  2714. called incident to the invocation of WSAAcceptEx().  The
  2715. inbound parameter  identifies the address of the requester.
  2716. The return value indicates whether the connection is to be
  2717. accepted or rejected.  As noted previously, the application
  2718. may also utilize this function to establish the new socket
  2719. as a group member.  We repeat the syntax for the
  2720. WSAAcceptEx() function below:
  2721.  
  2722. SOCKET PASCAL FAR WSAAcceptEx ( SOCKET s, struct sockaddr
  2723.           FAR * addr, int FAR * addrlen, FARPROC lpfnCondition );
  2724.           
  2725.           s          A descriptor identifying a socket which
  2726.                     is listening for connections after a
  2727.                     listen().
  2728.           
  2729.           addr      An optional pointer to a buffer which
  2730.                     receives the address of the connecting
  2731.                     entity, as known to the communications
  2732.                     layer.  The exact format of the addr
  2733.                     argument is determined by the address
  2734.                     family established when the socket was
  2735.                     created.
  2736.           
  2737.           addrlen   An optional pointer to an integer which
  2738.                     contains the length of the address addr.
  2739.           
  2740.           lpfnCondition  The procedure instance address of
  2741.                     the application-supplied condition
  2742.                     function which will make an
  2743.                     accept/reject decision based on the
  2744.                     caller information passed in as
  2745.                     parameters, and optionally create and/or
  2746.                     join a socket group by assigning
  2747.                     appropriate value to the result
  2748.                     parameter g of this function.
  2749.  
  2750.           This routine extracts the first connection on the
  2751.           queue of pending connections on s, and checks it
  2752.           against the condition function.  If the condition
  2753.           function returns TRUE, this routine creates a new
  2754.           socket with the same properties as s and returns a
  2755.           handle to the new socket, and then optionally
  2756.           creates and/or joins a socket group based on the
  2757.           value of the result parameter g.  Otherwise,
  2758.           reject this connection request, and proceed to the
  2759.           next one.  If no pending connections are present
  2760.           on the queue, and the socket is not marked as non-
  2761.           blocking, WSAAcceptEx() blocks the caller until a
  2762.           connection is present.  If the socket is marked
  2763.           non-blocking and no pending connections are
  2764.           present on the queue, WSAAcceptEx() returns an
  2765.           error as described below.  The accepted socket may
  2766.           not be used to accept more connections.  The
  2767.           original socket remains open.
  2768.  
  2769.           The prototype of the condition function is as
  2770.           follows:
  2771.           
  2772.        BOOL PASCAL FAR ConditionFunc( const char FAR
  2773.           * caller, int callerlen, GROUP FAR * g);
  2774.           
  2775.           ConditionFunc is a place holder for the
  2776.           application-supplied function name.  The actual
  2777.           condition function must reside in a DLL or
  2778.           application module and be exported in the module
  2779.           definition file.  You must use MakeProcInstance()
  2780.           to get a procedure-instance address for the
  2781.           callback function.  The exact format of the caller
  2782.           parameter is determined by the address family in
  2783.           which the communication is occurring.
  2784.           
  2785.           The result parameter g is assigned within the
  2786.           condition function to indicate the following
  2787.           actions:
  2788.                if g is an existing socket group id, add s to
  2789.           this group, provided all the requirements
  2790.            set by this group are met; or
  2791.  
  2792.           if g = SG_UNCONSTRAINED_GROUP, create an
  2793.                          unconstrained socket group and have
  2794.                          s as the first member; or
  2795.  
  2796.           if g = SG_CONSTRAINED_GROUP, create a constrained
  2797.                           socket group and have s as the first member; or
  2798.           
  2799.           if g = NULL, no group operation is performed.
  2800.  
  2801.           For unconstrained groups, any set of sockets may
  2802.           be grouped together as long as they are supported
  2803.           by a single Winsock Service Provider and are
  2804.           connection-oriented.  A constrained socket group
  2805.           requires that connections on all grouped sockets
  2806.           be to the same host.  For newly created socket
  2807.           groups, the new group id can be retrieved by using
  2808.           getsockopt() with option SO_GROUP_ID, if this
  2809.           connection operation completes successfully.
  2810.           
  2811.           The argument addr is a result parameter that is
  2812.           filled in with the address of the connecting
  2813.           entity, as known to the communications layer.  The
  2814.           exact format of the addr parameter is determined
  2815.           by the address family in which the communication
  2816.           is occurring.  The addrlen is a value-result
  2817.           parameter; it should initially contain the amount
  2818.           of space pointed to by addr; on return it will
  2819.           contain the actual length (in bytes) of the
  2820.           address returned.  This call is used with
  2821.           connection-oriented socket types such as
  2822.           SOCK_STREAM.  If addr and/or addrlen are equal to
  2823.           NULL, then no information about the remote address
  2824.           of the accepted socket is returned.
  2825.  
  2826.  
  2827. ????
  2828. ????
  2829. From ormail.intel.com!intelhf.intel.com!ccm!david_b_andersen Fri Feb 18
  2830. 13:55:06 1994
  2831. Date: Fri, 18 Feb 94 13:45:15 PST
  2832. From: David B Andersen <David_B_Andersen@ccm.hf.intel.com>
  2833. Message-ID: <940218134515_7@ccm.hf.intel.com>
  2834. To: martinh@jsbus.com
  2835. cc: Charlie_Tai@ccm.hf.intel.com, JAWADK@MICROSOFT.COM
  2836. Subject: Input for Winsock Ver 2
  2837. Status: OR
  2838.  
  2839.  
  2840. Text item: Text_1
  2841.  
  2842.                                                     02/18/94
  2843. Dear Martin,
  2844.  
  2845. Intel is pleased to supply the following input to the Winsock 2
  2846. definition process. There are 10 proposals in all, with this submittal
  2847. corresponding to proposal number 10. (Finally!)
  2848.  
  2849.  
  2850.  
  2851. Regards,
  2852.  
  2853. David B. Andersen
  2854. Intel Architecture Labs
  2855.  
  2856.  
  2857.  
  2858. Extension #10:
  2859.      Integration hooks for Windows Telephony
  2860.  
  2861. Description:
  2862. One of the primary benefits in extending Winsock to cover
  2863. multiple transports will be in providing a uniform and
  2864. consistent way to access to the data transport capabilities
  2865. of telephony connections, particularly high-bandwidth,
  2866. digital telephony.  In order to achieve this we believe it
  2867. is essential that Winsock work smoothly with the Windows
  2868. Telephony API (TAPI).  As both APIs are built upon the
  2869. Windows Open Systems Architecture (WOSA) foundation, we
  2870. assume at the outset that the best interworking will be
  2871. achieved when a single driver acts simultaneously as both a
  2872. Winsock and TAPI service provider.
  2873.  
  2874. There are several capabilities which are key to facilitating
  2875. this close interworking between call control and data
  2876. transmission.  Foremost among these is the ability for
  2877. applications to utilize telephony networks without needing
  2878. to be explicitly aware that they are doing so.  Winsock
  2879. should be able to accommodate this by providing a uniform
  2880. data transport abstraction that is common and consistent
  2881. across all supported networks.  Winsock service providers
  2882. should implement for telephony networks the multiplexing
  2883. capability that is expected and required on packet switched
  2884. networks.  Secondly, a method is needed to transition back
  2885. and forth between controlling a call with TAPI and
  2886. transmitting data with Winsock.  These capabilities can be
  2887. expressed by adding two additional socket options for
  2888. accessing underlying TAPI-specific identifiers.
  2889.  
  2890. Motivation:
  2891. Ever since the earliest days of SLIP and on into the present
  2892. with PPP, there has never been a standardized way to
  2893. establish an underlying telephone call.  When a protocol
  2894. such as TCP/IP or NetBIOS is to be run over a telephony
  2895. connection, the native addressing format of the protocol has
  2896. no way to include the required phone number.  In these
  2897. instances, the application will frequently need to establish
  2898. the connection itself prior to initiating data
  2899. communications.  The proper interface to use for this is
  2900. TAPI, since that is what it was made for.
  2901.  
  2902. Other  protocols are designed specifically for telephony
  2903. connections and their notion of address includes the phone
  2904. number.  When using such a protocol, the application need
  2905. not be concerned with pre-establishing the telephony
  2906. connection, as the service provider will have all of the
  2907. information needed to establish the connection itself.
  2908. However, even under these circumstances, we don't want to
  2909. preclude the application from being able to exercise control
  2910. over the underlying call.  Thus providing a way to go from a
  2911. Winsock data connection to the underlying TAPI call and back
  2912. again would be both powerful and useful.
  2913.  
  2914. Semantics:
  2915.  
  2916. Creating Winsock Sockets on an Existing Call
  2917.  
  2918. TAPI contains a function lineGetID that, given a line,
  2919. address, or call allows the app to find the companion
  2920. service-specific device name corresponding with the call.
  2921. For example, lineGetID can be invoked on an existing TAPI
  2922. call (using its handle) requesting the Winsock "device name"
  2923. corresponding to the given call.  If the TAPI provider does
  2924. not support Winsock , an error is returned.  Otherwise, a
  2925. Winsock "device name" is returned.
  2926.  
  2927.           #include "tapi.h"
  2928.           
  2929.           LPVARSTRING    lpDeviceID;
  2930.           HCALL          hCall;
  2931.           int                    Size_of_POTS;
  2932.           
  2933.           Size_of_POTS = sizeof(int) + sizeof(POTS_Address);
  2934.           lpDeviceID = Any-Memory-Allocation-Function (
  2935.                                         sizeof(VARSTRING) + Size_of_POTS );
  2936.           lpDeviceID->dwTotalSize = sizeof(VARSTRING) + Size_of_POTS;
  2937.           lineGetID( 0, 0, hCall,
  2938.           LINECALLSELECT_CALL,lpDeviceID, "Winsock");
  2939.  
  2940. What is actually returned in the VARSTRING struct pointed to
  2941. by the lpDeviceId parameter is the information that an
  2942. application using Winsock would need to create one or more
  2943. sockets over an existing phone call: namely a valid Winsock
  2944. address family and the remote address itself.  With this
  2945. information, the application can create a socket of the
  2946. desired type and request that a connection be established.
  2947.  
  2948.           #include "Winsock.h"
  2949.           
  2950.           SOCKET    s;
  2951.           void FAR *     lpDest_address;
  2952.           
  2953.           lpDest_address = lpDeviceID + lpDeviceID->dwStringOffset;
  2954.           s = socket( (int)*lpDest_address, SOCK_UNREL_ISOCH_STREAM, 0 );
  2955.           connect( s, lpDest_address, &Size_of_POTS );
  2956.           // Now, you can use Winsock as appropriate.
  2957.  
  2958. The underlying service provider will realize that a new call
  2959. does not need to be placed and simply create the required
  2960. data stream.
  2961.  
  2962.  
  2963. Transitioning a Call From Winsock to TAPI
  2964.  
  2965. In transitioning from a data transmission mode to a call
  2966. control mode, the application is strongly advised to first
  2967. use shutdown() to gracefully terminate the existing data
  2968. traffic without causing the underlying resources (i.e. the
  2969. phone call) to be released.  Once this is done the
  2970. application can retrieve the values of  PVD_CALL_ID which is
  2971. a "Call ID" assigned by the Service Provider (SP)
  2972. corresponding to the underlying call, and TAPI_DEVICE_ID
  2973. which is a TAPI device ID for the line over which the call
  2974. was placed.  Having obtained the information, the
  2975. application is then ready to invoke appropriate TAPI
  2976. functions in order to find the appropriate call handle as
  2977. follows and manipulate the call thereafter.
  2978.  
  2979.           #include "Winsock.h"
  2980.           #include "tapi.h"
  2981.           
  2982.           SOCKET    s;
  2983.           DWORD          dwCallID;      // Call ID defined by SP
  2984.           DWORD          dwDeviceID;    // TAPI line device ID
  2985.           LPHLINEAPI     lphLineApp;
  2986.           LPHLINE                lphLine;
  2987.           LPLINECALLLIST lpCallList;
  2988.           
  2989.           // A connection associated with socket s has been set up,
  2990.           // and some data may have been transferred over it using
  2991.           // Winsock.  Now, we would like to retrieve and  manipulate the
  2992.           // underlying TAPI call.
  2993.           
  2994.           shutdown( s, SD_BOTH );
  2995.           getsockopt( s, SOL_PROVIDER, PVD_CALL_ID, &dwCallID,
  2996. &sizeof(DWORD));
  2997.           getsockopt( s, SOL_PROVIDER, TAPI_DEVICE_ID, &dwDeviceID,
  2998.                                           &sizeof(DWORD));
  2999.           lineInitialize(lphLineApp, ... );
  3000.           lineOpen(*lphLineApp, dwDeviceID, lphLine, ... );
  3001.           // Here, allocate appropriate memory for the Call List
  3002.           // pointed to by lpCallList.
  3003.           lineGetNewCalls(*lphLine, 0, LINECALLSELECT_LINE, lpCallList);
  3004.           // Search for the list to find the matching hCall which has
  3005.           // the same "Call ID" (obtained by using lineGetID() with
  3006.           // "WINSOCK" device class, as shown above) as the dwCallID
  3007.           // returned from getsockopt() earlier.
  3008.           
  3009.           // Now, you can use TAPI to manipulate hCall as appropriate.
  3010.          
  3011.  
  3012. Transitioning a Call Back to Winsock from TAPI
  3013.  
  3014. If the application wishes to resume data communications on a
  3015. call that has been manipulated with TAPI, it is advisable to
  3016. assume that all existing sockets in the shutdown state are,
  3017. in some sense, broken.  Therefore, the application should
  3018. first use socket() to create replacement sockets, and then
  3019. use closesocket() to eliminate all sockets that were left in
  3020. the shutdown state.  Eliminating all of the old sockets
  3021. first is not wise as this will likely cause the underlying
  3022. phone call to be dropped.
  3023.  
  3024.           #include "Winsock.h"
  3025.           
  3026.           SOCKET        old_s, new_s;
  3027.           VOID FAR *     name;
  3028.           int FAR *              namelen;
  3029.           
  3030.           new_s = socket( AF_POTS, SOCK_UNREL_ISOCH_STREAM, 0 );
  3031.           getsockname( old_s, name, namelen );
  3032.           closesocket( old_s );
  3033.           bind( new_s, name, namelen);
  3034.           // Now, use lineGetID() to get the (maybe new) destination 
  3035.           // address, and reconnect using connect() as shown above
  3036.          
  3037.  
  3038. ????
  3039.                                                                              
  3040.   
  3041. -------------------------------------------------------------------------
  3042. Martin Hall                         108 Whispering Pines Drive, Suite 115
  3043. JSB Corporation                     Scotts Valley, California 95066
  3044. martinh@jsbus.com                   Tel: 408-438-8300   Fax: 408-438-8360
  3045.  
  3046. From: rcq
  3047. To: martinh
  3048. Cc: towfiq; davidtr
  3049. Subject: Windows Sockets 2 Contribution
  3050. Date: Sunday, March 06, 1994 7:22PM
  3051.  
  3052. Return-Path: <netmail!rcq@mailserv-D.ftp.com>
  3053. Date: Sun, 6 Mar 94 19:22:35 EST
  3054. Message-Id: <9403070022.AA18034@mailserv-D.ftp.com>
  3055. To: martinh@jsbus.com
  3056. Subject: Windows Sockets 2 Contribution
  3057. From: netmail!rcq@ftp.com  (Bob Quinn)
  3058. Reply-To: netmail!rcq@ftp.com
  3059. Cc: towfiq@sunsite.unc.edu, davidtr@microsoft.com
  3060. Sender: netmail!rcq@mailserv-D.ftp.com
  3061. Repository: mailserv-D.ftp.com, [message accepted at Sun Mar  6 19:22:11 1994]
  3062. Originating-Client: aeolus.ftp.com
  3063. Content-Length: 17903
  3064. ------------------------------------------------------------------------------
  3065. Gentlemen:
  3066.  
  3067. I apologize for this very late entry.  Unfortunately, the delay
  3068. couldn't be avoided.  I hope these suggestions can still be
  3069. considered.
  3070.  
  3071. I have forwarded this one file with all my suggestions to all three
  3072. of you.  And I forwarded individual messages for each of these
  3073. items to Martin, as he requested in his original solicitation.
  3074.  
  3075. Thanks for your consideration,
  3076. --
  3077.  Bob Quinn                                             rcq@ftp.com
  3078.  FTP Software, Inc.                                No. Andover, MA
  3079.  
  3080. Version 2.0 Windows Sockets suggested improvements
  3081. --------------------------------------------------
  3082. The following file contains numbered suggestions for Version 2.0
  3083. of the Windows Sockets specification in the format requested by 
  3084. Martin Hall (e.g. one line summary, followed by a single paragraph 
  3085. description).  The order in which they appear is arbitrary (i.e.
  3086. NOT related to their priority).
  3087. --
  3088. (1)Summary: Allow optional support of Windows Sockets extensions and
  3089.         add a new function to return bit flags to indicate which
  3090.         optional features a WinSock implementation supports.
  3091.  
  3092. Description:
  3093. The Windows Sockets API should use The Hosts Requirements RFC 1122
  3094. as a model for differentiating between required and optional features.
  3095. Since it is an API, not a protocol specification, the WinSock spec
  3096. can go one step further to provide a mechanism for reporting on the
  3097. optional features supported (e.g. a function GetWinsockExtensions()
  3098. that returns a pointer to bitflags defined by the Windows Sockets 
  3099. specification to denote different extensions).
  3100.  
  3101. --
  3102. (2) Summary: Add ability to support larger IP address space as needed
  3103.         by Simple Internet Protocol (IPng contender).
  3104.  
  3105. Description:
  3106. SIPP is one of the contenders the IETF is considering for IP "Next
  3107. Generation" (IPng).  "In order to implement the Simple Internet 
  3108. Protocol (SIPP) [Deering, ietf-draft, Nov'92] in an operating system 
  3109. based on 4.x BSD, changes must be made to some of the application 
  3110. program interfaces (APIs)...This paper presents a first attempt to 
  3111. define the API changes needed to support SIPP in BSD systems."  The
  3112. primary change the API must deal with is an increase in the size of
  3113. an IP address from 4-bytes to 8-bytes.
  3114.  
  3115.   from SIPP API Specification (draft-ietf-sip-bsd-api-01.txt)
  3116.   12/20/93 by Richard E. Gilligan (bob.gilligan@eng.sun.com)
  3117.  
  3118. Summary of new additions:
  3119. -------------------------
  3120. /* Simple Internet Protocol Address Form in use (NOT a socket type) */
  3121.     #define AF_SIPP     24
  3122.  
  3123. /* If AF_SIFF, sockaddr_in fields are redefined by macros */
  3124.         #define sipp_addr       sin_zero
  3125.         #define sipp_zero       sin_addr
  3126.  
  3127. /* sockets passed between processes use setsockopt() to set addr form */
  3128.         #define SIPP_ADDRFORM   0x16
  3129.  
  3130. /* setsockopt() to set flow ID in SIPP packets sent (cannot getsockopt()
  3131.     on received SIPP packets, however) */
  3132.         #define SIPP_FLOWID     0x15
  3133.  
  3134. /* new gethostbyname() equivalent for SIPP addresses */
  3135.         struct hostent *hostname2addr(const char *name, int af,
  3136.                                         char *buf, int buflen);
  3137.  
  3138. /* new ascii2addr() and addr2ascii() for SIPP address input/output */
  3139.         int ascii2addr(long af, char *cp, char *ap);
  3140.         char *addr2ascii(long af, char *ap, char *buf, int buflen);
  3141.  
  3142. --
  3143. (3) Summary: Allow retrieval of local IP address without using name
  3144.         resolution.
  3145.  
  3146. Description:
  3147. Allow support for the BSD gethostid() function, as well as the
  3148. SIOCGIFADDR option for the ioctlsocket() function.  For multi-homed
  3149. stacks, SIOCSIFADDR should also be allowed (to set local IP address).
  3150.  
  3151. --
  3152. (4) Summary: Provide access to the broadcast address.
  3153.  
  3154. Description:
  3155. Define support for the ioctlsocket() options SIOCGIFBRDADDR and 
  3156. SIOCSIFBRDADDR to get and set the IP Broadcast address.
  3157.  
  3158. --
  3159. (5) Summary:  Provide the Address Resolution Protocol (ARP) table.
  3160.  
  3161. Description:
  3162. Allow support for the SIOCGARP, SIOCSARP and SIOCDARP ioctlsocket()
  3163. options to get, set and delete entries in the TCP/IP protocol stack's 
  3164. ARP table. 
  3165.  
  3166. --
  3167. (6) Summary: Allow all low-level interface ioctlsocket() options to
  3168.         provide full control to an application on multi-homed hosts.
  3169.  
  3170. Description:
  3171. The following ioctlsocket() options should be (optionally) supported:
  3172.   - SIOCGIFADDR and SIOCSIFADDR ioctlsocket() options to get and set
  3173.      the interface address.
  3174.   - SIOCGIFDSTADDR and SIOCSIFDSTADDR to get and set point-to-point 
  3175.      interface address.
  3176.   - SIOCGIFFLAGS and SIOCSIFFLAGS to get and set interface flags 
  3177.      (which indicate, for example, if the interface is point-to-point, 
  3178.      supports broadcast addressing, whether the interface is running...
  3179.   - SIOCGIFCONF to get the interface configuration list containing one
  3180.      ifreq structure (a la BSD) for every interface available.
  3181.   - SIOCGIFMETRIC and SIOCSIFMETRIC to get and set the routing metrics
  3182.      (the kernel routing tables).
  3183.  
  3184. --
  3185. (7) Summary: Allow direct manipulation of the TCP Window.
  3186.  
  3187. Description:
  3188. Define (optional) support of the following:
  3189.   - SIOCGHIWAT and SIOCSHIWAT ioctlsocket() options to get and set 
  3190.      the TCP Window High Water mark.
  3191.   - SIOCGLOWAT and SIOCSLOWAT ioctlsocket() options to get and set
  3192.      the TCP Window Low Water mark.
  3193.   - SO_RCVLOWAT and SO_SNDLOWAT setsockopt() options to get and set
  3194.      the send and recieve low water marks.
  3195.  
  3196. --
  3197. (8) Summary: Define support for multicast using explicit binding (with
  3198.         the bind() function).
  3199.  
  3200. Description:
  3201. Any UDP Socket can send a datagram to a multicast address, but to
  3202. receive a multicast packet the socket must be (explicitly) bound to
  3203. the multicast address.  The underlying stack should do the right
  3204. thing to register the multicast address (e.g. using IGMP according
  3205. to Hosts Requirements RFC1122).
  3206.  
  3207. --
  3208. (9) Summary: Define a mechanism that would optionally prevent re-
  3209.         entrant messages to an application while a function (blocking
  3210.         or non-blocking) is pending.
  3211.  
  3212. Description:
  3213. Currently there is no blocking hook strategy that will prevent
  3214. reentrant messages to a calling application and work with all Windows
  3215. Sockets implementations available.  Since there are many applications 
  3216. and DLLs in existence that need network access but cannot be rewritten 
  3217. to handle reentrant messages, a caller should not be required to handle 
  3218. re-entrant messages while a network operation is pending.  A blocking
  3219. hook function that prevents reentrant messages should be possible on
  3220. all WinSock DLL implementations.
  3221.  
  3222. --
  3223. (10) Summary: As long as every process registers with a Winsock DLL,
  3224.         it should be able to access the sockets of another process.
  3225.  
  3226. Description:
  3227. Optional socket sharing between tasks can be implemented in one of two
  3228. ways: explicit or implicit.  Implicit sharing would allow any taskt that
  3229. calls WSAStartup() to to use any socket available.  Explicit sharing (as
  3230. in OS/2) would require a task to call ExportSocket(s) to make a socket
  3231. sharable and any task that wanted to use exported sockets would need to
  3232. call ImportSocket().  Either method is sufficient and necessary to
  3233. facilitate creation of many intermediate API's ("middleware") and master
  3234. server applications (that spawn other server applications, e.g. inetd).
  3235.  
  3236. In addition, this new socket sharing ability will require new function
  3237. definitions to provide information on a per socket basis.  Specifically:
  3238.    - WSAGetLastSocketError() to get the last error for an individual
  3239.       socket (whereas WSAGetLastError() is task-based).
  3240.    - WSAIsSocketBlocking() to determine if an individual socket has
  3241.       a blocking operation pending.
  3242.    - WSACancelSocketBlocking() to cancel an individual blocking socket.
  3243. Another possible strategy might be to leave the current two functions
  3244. and add a setsockopt() option to select a particular socket for these
  3245. functions to report on.
  3246.  
  3247. The task that creates a socket "owns" the socket.  When that task calls
  3248. WSACleanup() the WinSock DLL should destroy the socket, whether or not 
  3249. the application called closesocket().  Subsequent calls by other tasks
  3250. that reference that socket should fail with WSAENOTSOCK.
  3251.  
  3252. --
  3253. (11) Summary: Action of the WinSock DLL and underlying stack after a
  3254.         non-blocking closesocket() call needs clarification.
  3255.  
  3256. Description:
  3257. When an application calls closesocket() with a non-blocking socket:
  3258.   - a WinSock DLL should also fail with WSAEWOULDBLOCK on a non-
  3259.      blocking socket without SO_LINGER set (currently the specification
  3260.      only says it should with a non-zero SO_LINGER setting)
  3261.   - the specification should determine a default timeout for closing 
  3262.      a socket (e.g. a default time period after which the WinSock DLL 
  3263.      or underlying stack assumes the other end is not going to respond 
  3264.      to the TCP <FIN>, sends a <RST> and releases resources.  
  3265.   - the specification should also specify whether an application should 
  3266.      call closesocket() a second time after it returns a WSAEWOULDBLOCK 
  3267.      error, or use some other means to determine the state of the socket
  3268.      (e.g. select() or asynch message).
  3269.   - the specification should determine whether an application should
  3270.      call WSACleanup() immediately upon return from a closesocket()
  3271.      call that fails with WSACleanup, and describe the action of
  3272.      WSACleanup() when this happens (i.e. reset the connection).
  3273.  
  3274. --
  3275. (12) Summary: Define standard database format, locations, and mechanisms 
  3276.         for finding and setting them.
  3277.  
  3278. Description:
  3279. WinSock DLLs should have their (standard BSD format) database files in 
  3280. a well-known location, there should be a mechanism for locating them
  3281. (e.g. getservent(), gethostent(), getprotoent() functions) and setting 
  3282. them (setservent(), sethostent(), setprotoent() functions).  This would 
  3283. have the added benefit of allowing sequential search of the file(s) by 
  3284. an application (creating a function to do so is unnecessary).
  3285.  
  3286. --
  3287. (13) Summary: Define the C++ Class Library for Windows Sockets
  3288.  
  3289. Description:
  3290. The Windows Sockets API should have a standard class library defined 
  3291. that takes advantages of OOP encapsulation features with some
  3292. specialized classes that make programming to the specification easier
  3293. (e.g. TCP server, TCP client, etcetera).
  3294.  
  3295. --
  3296. (14) Summmary: Define the standard Error Text for WinSock errors
  3297.  
  3298. Description:
  3299. Use the BSD 4.3 descriptions for analogous errors in English.  Provide
  3300. the source code for one possible function that uses string resources
  3301. to translate error numbers into text, but put the onus on the applica-
  3302. tion developer to implement the function and provide the text (so they
  3303. can translate into other languages if they want to).
  3304.  
  3305. --
  3306. (15) Summary: Statements needed on some issues
  3307.  
  3308. Description:
  3309. The specification should make statements to clarify the assumptions
  3310. an application developer can make in regards to:
  3311.     - assuming a socket is equivalent to a file descriptor
  3312.     - socket sharing between processes
  3313.     - database file (host table, protocol and services file) 
  3314.        format and location
  3315.     - name resolution protocols used
  3316.     - support of the Unix Domain, the loopback addresses, and
  3317.        recommendations for local interprocess communication in 
  3318.        Windows
  3319.     - recommended ways to retrieve local username.
  3320.     - caution application developers not to do more than one recv()
  3321.        call in their FD_READ message handler (a common mistake).
  3322.        
  3323. --
  3324. (16) Summary: Define support for protocols other than TCP/IP
  3325.  
  3326. Description:
  3327. At a minimum, describe support for NetBEUI, IPX/SPX and Appletalk.
  3328.  
  3329. --
  3330. (17) Summary: Define a standard debugging paradigm
  3331.  
  3332. Description:
  3333. Current support of setsockopt(SO_DEBUG) option is spotty at best,
  3334. and undefined (so it differs between winsock implementations).  The
  3335. specification should make recommendations on the mechanism to use
  3336. for output and the format of the output.  The Windows Debug device
  3337. is an obvious candidate, though it is very crude since it doesn't
  3338. provide a means of filtering output and can be overloaded.  Defining 
  3339. a DDE or OLE interface would be more elegant and useful.
  3340.  
  3341. --
  3342. (18) Summary: Define a mechanism for handling multiple Winsock DLL's
  3343.         simultaneously.
  3344.         
  3345. Description:
  3346. With the support of protocol suites in addition to TCP/IP, users are
  3347. likely to need more than one WinSock DLL in use simultaneously.  The
  3348. Windows Sockets specification must define a mechanism for multiplexing 
  3349. co-resident Windows Sockets API's.  Microsoft's Service Provider
  3350. Interface (SPI) seems a likely candidate.
  3351.  
  3352. --
  3353. (19) Summary: Define a standard mechanism for determining the version
  3354.          of the WinSock DLL implementation itself
  3355.  
  3356. Description: 
  3357. Require the use of the standard Version Resource or add a field to 
  3358. WSAData so a program can retrieve a numeric version description in a 
  3359. standard way.
  3360.  
  3361. --
  3362. (20) Summary: Define a mechanism to allow access to the subnet mask.
  3363.  
  3364. Description:
  3365. Define the use of the ioctlsocket() options SIOCGIFNETMASK and
  3366. SIOCSIFNETMASK to get and set the IP subnet address mask.
  3367.  
  3368. --
  3369. (21) Summary: Provide a mechanism to allow access to the IP routing.
  3370.  
  3371. Description:
  3372. Define the use of the ioctlsocket() options SIOCADDRT and SIODELRT 
  3373. to add and delete an IP route.
  3374.  
  3375. --
  3376. (22) Summary: Provide for asymmetric send and receive Maximum UDP
  3377.         datagram sizes.
  3378.  
  3379. Description:
  3380. Currently there is only one iMaxUdpDg (maximum UDP Datagram size) in
  3381. the WSAData structure returned by WSAStartup().  Since outgoing 
  3382. datagrams do not make large buffer demands, but incoming oversized 
  3383. datagrams do, some TCP/IP protocol stacks can send oversized Datagrams 
  3384. but cannot receive them.  Just as there is symmetry with send and
  3385. receive buffer sizes (SO_SEND and SO_RECV options for setsockopt),
  3386. there should be symmetry for iMaxUdpDg to differentiate the max UDP
  3387. datagram sizes that an application can send and receive.
  3388.  
  3389. --
  3390. (23) Summary: Provide a mechanism to set the Time-to-Live field in
  3391.         an IP packet.
  3392.  
  3393. Description:
  3394. In BSD the only way to get at the IP Time-To-Live (TTL) field is to 
  3395. request a SOCK_RAW socket for IPPROTO_IP, and create the IP header in 
  3396. it's entirety.  Since many TCP/IP stacks cannot provide this service 
  3397. and because it invites disaster, this is not ideal.  Setting the TTL
  3398. is very useful for providing a simple mechanism to do the typical
  3399. (UDP or ICMP) traceroute function. The spec should define a simple 
  3400. mechanism such as a SO_TTL option for setsockopt() that would allow
  3401. setting the TTL without wreaking havoc.
  3402.  
  3403. --
  3404. (24) Summary: Provide a mechanism to get a "privileged port"
  3405.  
  3406. Description:
  3407. Provide the function rresvport(), to return a port number between
  3408. 512 and 1024.
  3409.  
  3410. --
  3411. (25) Summary: Provide API support for gather reads and scatter writes.
  3412.  
  3413. Description:
  3414. Provide (equivalents for) the functions readv() and writev().
  3415.  
  3416. --
  3417. (26) Summary: Provide a symmetrical function to gethostname() to allow
  3418.         setting a local hostname.
  3419.  
  3420. Description:
  3421. Define a new function sethostname().
  3422.  
  3423. --
  3424. (27) Summary: Define a mechanism to retrieve network statistics
  3425.  
  3426. Description:
  3427. There are many times when an application needs access to network stack 
  3428. statistics (such as when implementing an network management station, 
  3429. for example).  There should be a function that provide statistics akin
  3430. to those returned by BSD netstat.  This function could return a pointer
  3431. to a network domain specific statistics structure that had counts of
  3432. protocol packets in/out, error counts, etcetera.  
  3433.  
  3434. --
  3435. (28) Summary: Define how the Windows Sockets API expects the TCP/IP
  3436.         stack to implement out of band data (urgent data).
  3437.  
  3438. Description:
  3439. Describe the fact that OOB data is *not* truly "out of band" (i.e.
  3440. that it cannot be retrieved until all data previous to it has
  3441. been processed).   The reason for this limitation is that a TCP urgent
  3442. pointer can point ahead to data that the stack hasn't received yet.
  3443. The specification should provide the semantics --preferably as an 
  3444. example--of how OOB should be used when "in-line" and not.
  3445.  
  3446. --
  3447. (29) Summary: Each function should have a simple sample to show how
  3448.         to use it. 
  3449.  
  3450. Description:
  3451. A sample is worth a thousand words.  Many functions warrant more 
  3452. than one example to show the different ways to use a them, but
  3453. the samples don't need to cover all possible variations (just some
  3454. of the common ones, and particularly those that cause confusion).
  3455.  
  3456. --
  3457. (30) Summary: Provide a mechanism for setting the TCP push bit.
  3458.  
  3459. Description: 
  3460. Add an option flag for send() that allows setting the TCP push bit
  3461. since some TCP/IP stacks require receipt of a TCP segment with the
  3462. push bit set before data will be made available to the application.
  3463. Another possibility is to adopt the flush() function used in BSD.
  3464. NOTE: This is not related to the TCP_NODELAY setsockopt() option
  3465. which overrides the Nagle algorithm.
  3466.  
  3467. --
  3468. (31) Summary: Add an option to turn off UDP checksumming
  3469.  
  3470. Description:
  3471. Many new applications are doing transmission of multi-media (e.g.
  3472. video and audio) and typically they use UDP.  Some applications may
  3473. be tolerant of errors in the data received and might prefer to
  3474. receive damaged data over the alternative of not receiving the data
  3475. at all.  Adding a setsockopt() option to disable UDP checksumming
  3476. (which is optional as per The hosts requirements RFC1122), would
  3477. allow this possibility.
  3478.  
  3479. --
  3480. (32) Summary: When an FD_READ message contains an error, don't
  3481.         require the application to call the notification reenabling
  3482.         function (recv() or recvfrom()).
  3483.  
  3484. Description:
  3485. One very common error in Windows Sockets application programming is
  3486. not to call recv() or recvfrom() when an error is passed in an FD_READ
  3487. message.  Subsequently, the WinSock DLL will not send anymore FD_READ 
  3488. messages, though there may in fact be data pending.  Since errors are
  3489. infrequent, it should not cause problems if the FD_READ event is "edge
  3490. triggered" for messages containing errors.  In other words, after a
  3491. WinSock DLL sends an FD_READ message containing an error, it should 
  3492. post subsequent FD_READ messages even if the application hasn't called 
  3493. either recv() or recvfrom() (the "notification re-enabling functions").
  3494.  
  3495. --
  3496. (33) Summary: SOCK_RAW useage should be defined.
  3497.  
  3498. Description:
  3499. At a minimum, the use of SOCK_RAW for IPPROTO_ICMP should be defined.
  3500.  
  3501.  
  3502.